我最近一直在玩正则表达式,当我在php中使用preg_match_all时,有一件事对我没有预期效果.
我在http://www.solmetra.com/scripts/regex/index.php上使用在线正则表达式工具.
我正在使用的正则表达式是/(?>x|y|z)w/.我正在匹配abyxw.我期待它失败,但它成功,并匹配xw.
由于使用了原子分组,我期待它失败,从我从多个来源读取的内容,可以防止回溯.我所期待的是发动机试图匹配y交替并成功.后来它试图w与正则表达式文字匹配w并失败,因为它遇到了x.然后它通常会回溯,但在这种情况下,由于原子分组,它不应该回溯.所以据我所知,它应该继续尝试y与这个原子组相匹配.但事实并非如此.
我很感激有关这种情况的任何亮点.:)
这有点棘手,但是当正则表达式找不到匹配项时,它可以尝试执行以下两件事:
i,则将从索引处开始再次尝试i+1,并且这将继续,直到到达字符串末尾。原子团可以防止回溯,但不会影响起始位置的前进。
在这种情况下,当引擎尝试将 与y作为第一个字符进行匹配时,匹配将会失败,但随后它将继续前进并视为xw字符串的其余部分,它将匹配。