Что такое независимая группа захвата регулярных выражений?

Из документации Java 6 Pattern:

Специальные конструкции (не захватывающие)

(?: X )   X, как группа, не захватывающая захват

...

(?> X )   X, как независимая, не захватывающая группа

Между (?:X) и (?>X) в чем разница? Что означает независимый в этом контексте?

Ответы

Ответ 1

Это означает, что группировка atomic, и она отбрасывает информацию о возврате для сопоставленной группы. Итак, это выражение является притяжательным; он не отступит, даже если это единственный способ для регулярного выражения в целом добиться успеха. Он "независим" в том смысле, что он не взаимодействует с помощью обратного отслеживания с другими элементами регулярного выражения, чтобы обеспечить соответствие.

Ответ 2

Если у вас foo(?>(co)*)co, это никогда не будет соответствовать. Я уверен, что есть практические примеры того, когда это было бы полезно, попробуйте книгу О'Рейли.

Ответ 3

(?>X[?/*/+]) совпадает с (?:X)[?/*/+]+.

Ответ 4

(?>X)[?/*/+] совпадает с (?:X)[?/*/+]+.