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