从Java 6 Pattern文档:
特殊构造(非捕获)
(?:X)X,作为非捕获组...
(?>X)X,作为一个独立的非捕获组
之间(?:X)和有(?>X)什么区别?在这种情况下,独立意味着什么?
我认为本教程解释了“独立的非捕获组”或“原子分组”究竟是什么
正则表达式a(bc|b)c(捕获组)匹配abcc和abc。正则表达式a(?>bc|b)c(原子组)匹配abcc但不匹配abc。
当施加到ABC,两个正则表达式将匹配a到一个,bc以BC,然后c将不能匹配在字符串的末尾。在这里,他们的道路分道扬镳。带有捕获组的正则表达式记住了交替的回溯位置。该组将放弃其匹配,b然后匹配b并c匹配c。找到匹配!
然而,带有原子组的正则表达式在bc匹配后从原子组中退出。此时,组内令牌的所有回溯位置都将被丢弃。在此示例中,b放弃在字符串中的第二个位置尝试的交替选项。因此,当c失败时,正则表达式引擎没有其他选择可以尝试。