我有一个为我工作的RegEx,但我不知道为什么它对我有用.我会解释一下.
RegEx: \s*<in.*="(<?.*?>)"\s*/>\s*
Run Code Online (Sandbox Code Playgroud)
它找到的文本(它在输入标记之前和之后找到空格):
<td class="style9">
<input name="guarantor4" id="guarantor4" size="50" type="text" tabindex="10" value="<?php echo $data[guarantor4]; ?>" /> </td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我不明白的部分:
<in.*=" <--- As I understand it, this should only find up to the first =" as in it should only find <input name="
It actually finds: <input name="guarantor4" id="guarantor4" size="50" type="text" tabindex="10" value=" which happened to be what I was trying to do.
Run Code Online (Sandbox Code Playgroud)
我对此RegEx的理解不明确?
您似乎正在使用"贪婪"匹配.
贪婪的匹配说"尽可能多地吃这个"
尝试
<in[^=]*=
Run Code Online (Sandbox Code Playgroud)
对于初学者来说,这将阻止它匹配"="作为".*"的一部分
但是将来你可能想读一下
.*?
Run Code Online (Sandbox Code Playgroud)
和
.+?
Run Code Online (Sandbox Code Playgroud)
符号,在第一个匹配而不是最后一个匹配的条件停止.
如果你试图只在你看到两个字符时停止,那么使用'非贪婪'语法会更好
即:
<in.*?=id
Run Code Online (Sandbox Code Playgroud)
无论两者之间是否存在'=',它都会停在第一个'= id'上.