正则表达式不按升序运行。

时间:2015-11-24 22:23:54

标签: regex

这可能是一个简单的问题,但我无法弄清楚。 当我测试以下字符串TEST_NO时 \b(?>TEST|TEST_NO)\b它不匹配。当我针对\b(?>TEST_NO|TEST)\b测试时,它按预期工作。有人可以解释原因吗?

2 个答案:

答案 0 :(得分:3)

这个正则表达式:

\b(?>TEST|TEST_NO)\b
由于使用Atomic Group

将无法与TEST_NO匹配。

当正则表达式引擎退出时,原子组会自动丢弃组中任何令牌记住的所有后退位置。

由于此正则表达式首先匹配\bTEST,因此在此之后它将从原子组退出。

答案 1 :(得分:3)

也许您打算使用非捕获组:

\b(?:TEST|TEST_NO)\b

您使用的是 atomic group atomic groups阻止了回溯。

  

原子组是一个组,当正则表达式引擎从它退出时,它会自动丢弃由组内任何标记记住的所有回溯位置。

这是怎么回事:

The subpattern               Text

\b(?>TEST|TEST_NO)\b         TEST_NO
^^^^^^^^^                    ^^^^

然后它试图匹配:

The subpattern               Text

\b(?>TEST|TEST_NO)\b         TEST_NO
                  ^^             ^

它失败了,所以它试图回溯,但是原子组会阻止它。

您还可以在regex101.com中查看逐步调试(单击正则表达式调试器)。

regex101 debug