怎么会'.+?' 正规表达工作?.+部分是否匹配任何内容,以及?部分说它可以在那里吗?因此,例如,此正则表达式将匹配:
'cat'
''(即没有写,只是空字符串)
Han*_*ing 10
"+?" 不是"+"量词后跟"?" 量词.取而代之的是"?" 修改"+"以执行"懒惰"或"非贪婪"匹配,这意味着匹配的最少字符数已足够.
那么"a +?" 正则表达式只匹配"caaat"中的单个"a".
除了汉斯·凯斯汀(Hans Kesting)已经说过的话,一个惰性乘法器将完成正常贪心乘数的精确对数:可能的匹配保持尽可能小,并测试正则表达式的其余部分.
因此,如果您正在使用字符串aaba
并a.*b
在其上测试正则表达式,则内部处理步骤如下:
a
在比赛中a
.*b
a
aba
.*
在比赛中,因为是贪婪的
a
.*
b
a
a
ba
.*
.*
然后匹配 a
ab
a
.*
然后匹配 a
aba
b
在a.*
b
因为没有留下一封信失败
.*
现在将只匹配bb
在a
ab
a
b
在a.*
b
仍然失败aab
a
.*
现在只匹配b
在a
a
ba
b
在a.*
b
现在比赛b
中,我们就大功告成了.aa
b
a
所以完全匹配是.aab
a
如果我们对惰性乘数(a.*?b
)执行相同操作,则处理将执行oposite,尝试尽可能匹配尽可能少的字符:
a
在比赛中a
.*?b
a
aba
.*
在没有匹配(=零或更多重复),并且因为被声明为lazy(),正则表达式的其余部分被测试a
.*
?b
*
.*
.*?
b
在a.*?
b
失败的a
a
ba
.*
.*
现在比赛 a
a
ba
b
在a.*?
b
比赛中,我们已经完成了.aa
b
a
所以完全匹配如果.aab
a
归档时间: |
|
查看次数: |
887 次 |
最近记录: |