Ana*_*and -2 regex python-3.x regex-greedy
我正在使用 python3 re 模块 - 我发现a*a匹配aaa. 我认为正则表达式默认是贪婪的(除非我们用 覆盖它来懒惰?) - 因此,a*将匹配整个字符串,并且a模式中的尾随将失败。然而,它匹配:
$ import re
$ re.match(r'a*a', 'aaa')
<_sre.SRE_Match object; span=(0, 3), match='aaa'>
Run Code Online (Sandbox Code Playgroud)
这不应该失败吗?
它最初会尝试匹配整个字符串,但如果匹配失败,重复将回溯。在最初匹配整个字符串之后a*,正则表达式尝试匹配下一个标记,单个此a失败,因此回溯a* 回一个字符(以便它只匹配aa而不是匹配aaa)。这次,最后一个标记 singlea已满足,因此找到了匹配项。
贪婪并不意味着只有允许重复标记与字符串的整个其余部分匹配时,正则表达式才会匹配。如果可以的话它会,但如果不能的话它会回溯。
即使贪婪重复*回溯长度为零,也没有问题,因为*意味着匹配零次或多次。(相比之下,重复使用+,如果它回溯到零长度,则正则表达式将完全失败,因为+意味着至少需要重复一次)
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |