为什么这个RegEx以我想要的方式工作?

Haa*_*bda 4 regex

我有一个为我工作的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的理解不明确?

Ken*_*ric 8

您似乎正在使用"贪婪"匹配.

贪婪的匹配说"尽可能多地吃这个"

尝试

<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'上.


eye*_*ess 7

.*很贪心.你想要.*?找到第一个=.