2008-09-08 29 views
50

Desde el Java 6 Pattern documentación:¿Qué es un "grupo de captura independiente" regex?

construcciones especiales (no captura)

(?: X)       X, como un grupo que no captura

...

(?> X)       X, como un grupo independiente, no captura

Entre (?:X) y (?>X) ¿cuál es la diferencia? ¿Qué significa la independiente en este contexto?

+0

'(?> X) [?/*/+]' Es lo mismo que '(?: X) [?/*/+] +'. – jobard

Respuesta

38

Significa que la agrupación es atomic, y descarta la información de retroceso de un grupo coincidente. Entonces, esta expresión es posesiva; no retrocederá aunque hacerlo sea la única forma en que la expresión regular en su conjunto tenga éxito. Es "independiente" en el sentido de que no coopera, mediante retroceso, con otros elementos de la expresión regular para garantizar una coincidencia.

6

Si tiene foo(?>(co)*)co, eso nunca coincidirá. Estoy seguro de que hay ejemplos prácticos de cuándo sería útil, pruebe el libro de O'Reilly.

+3

+1 por mencionar ** el libro ** o'reilly –

0

(?>X[?/*/+]) es lo mismo que (?:X)[?/*/+]+.

+0

La palabra 'independiente' en [el Patrón JavaDocs] (http://docs.oracle.com/javase/7/docs/api/java/util/regex /Pattern.html) es importante. No son exactamente lo mismo, porque '(?> X)' no hace ningún retroceso cuando falla una coincidencia parcial, por lo que algunas cosas que coinciden con uno no coincidirán con el otro. El [artículo @erickson vinculado fue útil para mí.] (Http://www.regular-expressions.info/atomic.html) – xdhmoore

+0

Lo siento, no estoy en esto actualmente, así que tal vez mi respuesta no es precisa. Pero de su propia referencia: "La mayoría de estos también son compatibles con cuantificadores posesivos, que son esencialmente una conveniencia de notación para la agrupación atómica". Esto es lo que estaba tratando de expresar. En este último caso, el carácter adicional '+' significa los calificadores posesivos. – beibichunai

Cuestiones relacionadas