正则表达式原子分组在preg中似乎不起作用
我最近一直在玩正则表达式,当我在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
看作字符串的剩余部分,这将匹配。