请考虑以下Python代码:
>>> re.search(r'.*(99)', 'aa99bb').groups()
('99',)
>>> re.search(r'.*(99)?', 'aa99bb').groups()
(None,)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我在第二个例子中没有抓到99.
Tim*_*ker 11
这是因为第.*一个匹配整个字符串.此时,它不可能再匹配99,并且由于该组是可选的,因此正则表达式引擎停止,因为它已找到成功匹配.
另一方面,如果该组是强制性的,则正则表达式引擎必须回溯到该组.*.
比较来自RegexBuddy的以下调试会话(匹配的字符串部分.*以黄色突出显示,部分匹配为(99)蓝色):
.*(99):
.*(99)?:
