bod*_*ydo 7 regex backtracking
任何人都可以解释,正则表达式引擎匹配的进程(aa)+\1反对aaaaaa?我知道当你使用时有一个叫做回溯的过程+,*但是我不确定它在这个例子中是如何工作的.
Roh*_*ain 14
当您将量词放在捕获组之外时,它不会使用量词捕获与该模式匹配的整个字符串.它只匹配模式匹配的最后一次重复.
因此,(aa)+不会捕获aaaa捕获组,而只捕获最后一对 - aa以便它可以满足其余的正则表达式模式.
因此,(aa)+\1首先匹配模式 - aaaa然后反向引用\1匹配捕获的组 - aa.因此匹配字符串 - aaaaaa.不(aa)+将不匹配所有的a's,因为那样的话会有什么遗留下来的匹配\1.
这是正则表达式的分解(aa)+\1:
(aa)+匹配aa字符串中的前两个.剩下的字符串 - aaaa.(aa)+,所以它接下来匹配aa.剩下的字符串 - aa.(aa)+可以匹配剩余的字符串.所以它匹配下一个aa.剩下的字符串 - "".请记住,默认情况下,量词表示贪婪.他们会尽可能地匹配.(aa)+无法再进一步匹配了.\1.但没有什么可以匹配的了.(aa)+.剩下的字符串 - "aa".\1再次尝试匹配,并且它匹配成功aa,因为这是目前什么1 日捕获组.参考文献: