什么是正则表达式“独立非捕获组”?
来自 Java 6 模式文档:
特殊构造(非捕获)
(?:
X X,作为非捕获组)
...
(?>
X X,作为一个独立的、非捕获的组)
之间和有什么区别?在这种情况下,独立意味着什么?(?:X)
(?>X)
来自 Java 6 模式文档:
特殊构造(非捕获)
(?:
X X,作为非捕获组)
...
(?>
X X,作为一个独立的、非捕获的组)
之间和有什么区别?在这种情况下,独立意味着什么?(?:X)
(?>X)
这意味着分组是原子的,并且会丢弃匹配组的回溯信息。所以,这个表达是所有格的;它不会退缩,即使这样做是整个正则表达式成功的唯一途径。它是“独立的”,因为它不通过回溯与正则表达式的其他元素合作以确保匹配。
我认为本教程解释了“独立,非捕获组”或“原子组”究竟是什么
正则表达式(捕获组)与 abcc 和 abc 匹配。正则表达式(原子组)与 abcc 匹配,但与 abc 不匹配。a(bc|b)c
a(?>bc|b)c
当应用于 abc 时,两个正则表达式都将匹配到 a、bc,然后在字符串的末尾将无法匹配。在这里,他们的道路分道扬镳。具有捕获组的正则表达式已记住交替的回溯位置。该组将放弃其匹配项,然后匹配 b 并匹配 c。匹配已找到!a
bc
c
b
c
然而,具有原子群的正则表达式在匹配后退出了原子群。此时,组内令牌的所有回溯位置都将被丢弃。在此示例中,将放弃交替选项以尝试字符串中的第二个位置。因此,当发生故障时,正则表达式引擎没有替代方法可供尝试。bc
b
c