什么是正则表达式"独立捕获组"?

Pet*_*art 55 java regex

从Java 6 Pattern文档:

特殊构造(非捕获)

(?:X )   X,作为非捕获组

...

(?>X )   X,作为一个独立的非捕获组

之间(?:X)和有(?>X)什么区别?在这种情况下,独立意味着什么?

eri*_*son 44

这意味着分组是原子的,它会抛弃匹配组的回溯信息.所以,这种表达是占有欲的; 它不会退缩,即使这样做是整个正则表达式成功的唯一途径.它是"独立的",因为它不会通过回溯与正则表达式的其他元素合作以确保匹配.


kaj*_*ibu 9

我认为本教程解释了“独立的非捕获组”或“原子分组”究竟是什么

正则表达式a(bc|b)c(捕获组)匹配abccabc。正则表达式a(?>bc|b)c(原子组)匹配abcc但不匹配abc

当施加到ABC,两个正则表达式将匹配a一个bcBC,然后c将不能匹配在字符串的末尾。在这里,他们的道路分道扬镳。带有捕获组的正则表达式记住了交替的回溯位置。该组将放弃其匹配,b然后匹配bc匹配c。找到匹配!

然而,带有原子组的正则表达式在bc匹配后从原子组中退出。此时,组内令牌的所有回溯位置都将被丢弃。在此示例中,b放弃在字符串中的第二个位置尝试的交替选项。因此,当c失败时,正则表达式引擎没有其他选择可以尝试。


小智 6

如果你有foo(?>(co)*)co,那将永远不会匹配.我确信有一些实用的例子说明这个有用的时候,试试O'Reilly的书.