这可能是一个简单的问题,但我无法弄清楚。
当我测试以下字符串TEST_NO时
\b(?>TEST|TEST_NO)\b
它不匹配。当我针对\b(?>TEST_NO|TEST)\b
测试时,它按预期工作。有人可以解释原因吗?
答案 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中查看逐步调试(单击正则表达式调试器)。