从Java 6 Pattern文档:
特殊构造(非捕获)
(?:
X)
X,作为非捕获组...
(?>
X)
X,作为一个独立的非捕获组
之间(?:X)
和有(?>X)
什么区别?在这种情况下,独立意味着什么?
这意味着分组是原子的,它会抛弃匹配组的回溯信息.所以,这种表达是占有欲的; 它不会退缩,即使这样做是整个正则表达式成功的唯一途径.它是"独立的",因为它不会通过回溯与正则表达式的其他元素合作以确保匹配.
如果你有foo(?>(co)*)co
,那将永远不会匹配.我确信有一些实用的例子说明这个有用的时候,试试O'Reilly的书.