我最近一直在玩正则表达式,当我在 php.ini 中使用 preg_match_all 时,有一件事对我来说没有按预期工作。
我在http://www.solmetra.com/scripts/regex/index.php使用在线正则表达式工具。
我使用的正则表达式是/(?>x|y|z)w/
. 我正在使它匹配abyxw
。我预计它会失败,但它会成功,并且匹配xw
.
由于使用了原子分组,我预计它会失败,从我从多个来源阅读的内容来看,它可以防止回溯。我所期待的正是引擎尝试y
与交替匹配并成功。后来它尝试w
与正则表达式文字匹配w
并失败,因为它遇到x
. 然后它通常会回溯,但由于原子分组,在这种情况下它不应该。所以据我所知,它应该继续尝试y
与这个原子组匹配。然而事实并非如此。
我希望能对这种情况有所了解。:)