Что такое регулярное выражение "независимая группа захвата"?
из Java 6 Pattern документы:
специальные конструкции (без захвата)
(?:X)X, как группа без захвата...
(?>X)X, как независимая, не захватывающая группа
между (?:X) и (?>X) в чем разница? Что значит независимая значит в данном контексте?
4 ответа:
Это означает, что группировка atomic, и он выбрасывает информацию об обратном отслеживании для соответствующей группы. Таким образом, это выражение является собственническим; оно не отступит, даже если это единственный способ для регулярного выражения в целом добиться успеха. Он "независим" в том смысле, что он не взаимодействует, посредством обратного отслеживания, с другими элементами регулярного выражения для обеспечения соответствия.
Если у вас
foo(?>(co)*)co, что никогда не будет соответствовать. Я уверен, что есть практические примеры, когда это было бы полезно, попробуйте книгу О'Рейли.
Я думаю в этом уроке объясняет, что именно такое "независимая, не захватывающая группа" или "атомарная группировка"
регулярное выражение
a(bc|b)c(группа захвата) матчей abcc и abc. Регулярное выражениеa(?>bc|b)c(атомные группы) матчей abcc а не abc.при применении к abc, оба регулярных выражения будут совпадать
aдо a,bcto bc, а потомcне будет соответствовать в конце строки. Здесь их пути расходятся. Регулярное выражение с захват группы запомнил позицию возврата для чередования. Группа откажется от своего матча,bзатем матчей b иcигр c. Матч найден!регулярное выражение с атомные группы, однако, вышел из атомной группы после
bcбыли обнаружены. В этот момент все позиции возврата для токенов внутри группы отбрасываются. В этом примере, вариант чередования, чтобы попробоватьbна второй позиции в строке отбрасывается. В результате, когдаcне удается, механизм регулярных выражений не имеет альтернативы, чтобы попробовать.