Что такое независимая группа захвата регулярных выражений?
Из документации Java 6 Pattern:
Специальные конструкции (не захватывающие)
(?:
X )
X, как группа, не захватывающая захват
...
(?>
X )
X, как независимая, не захватывающая группа
Между (?:X)
и (?>X)
в чем разница? Что означает независимый в этом контексте?
Ответы
Ответ 1
Это означает, что группировка atomic, и она отбрасывает информацию о возврате для сопоставленной группы. Итак, это выражение является притяжательным; он не отступит, даже если это единственный способ для регулярного выражения в целом добиться успеха. Он "независим" в том смысле, что он не взаимодействует с помощью обратного отслеживания с другими элементами регулярного выражения, чтобы обеспечить соответствие.
Ответ 2
Если у вас foo(?>(co)*)co
, это никогда не будет соответствовать. Я уверен, что есть практические примеры того, когда это было бы полезно, попробуйте книгу О'Рейли.
Ответ 3
(?>X[?/*/+])
совпадает с (?:X)[?/*/+]+
.
Ответ 4
(?>X)[?/*/+]
совпадает с (?:X)[?/*/+]+
.