2008-09-08 4 views
50

С Java 6 Pattern документации:Что такое независимая группа захвата регулярных выражений?

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

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

...

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

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

+0

`(?> X) [?/*/+]` Такое же, как `(?: X) [?/*/+] +`. – jobard 2013-02-27 17:52:48

ответ

38

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

6

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

+3

+1 для упоминания ** книги ** o'reilly – 2011-05-25 16:12:00

0

(?>X[?/*/+]) - это то же самое, что и (?:X)[?/*/+]+.

+0

Слово `independent` в [Pattern JavaDocs] (http://docs.oracle.com/javase/7/docs/api/java/util/regex /Pattern.html). Они не совсем то же самое, потому что `(?> X)` не выполняет никакого возврата, когда неполное совпадение терпит неудачу, поэтому некоторые вещи, которые соответствуют друг другу, не будут соответствовать другому. [Статья, связанная с @erickson, была полезна для меня.] (Http://www.regular-expressions.info/atomic.html) – xdhmoore 2017-08-31 17:26:17

Смежные вопросы