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