java - ¿Son redundantes los grupos que no capturan?
regex capture-group (1)
¿Son redundantes los grupos opcionales que no capturan?
Es la siguiente expresión regular:
(?:wo)?men
semánticamente equivalente a la siguiente expresión regular?
(wo)?men
Sus
(?:wo)?men
y
(wo)?men
son semánticamente equivalentes, pero técnicamente son diferentes, a saber, el primero está usando un grupo que no captura y el otro un grupo de captura.
Entonces, la pregunta es
¿por qué usar grupos que no capturan cuando tenemos grupos de captura
?
Los grupos sin captación son de ayuda a veces.
- Para evitar un número excesivo de referencias posteriores (recuerde que a veces es difícil utilizar referencias posteriores superiores a 9)
-
Para evitar el problema con el límite de 99 referencias numeradas (reduciendo el número de grupos de captura numerados) (fuente:
Regular-expressions.info
: la
mayoría de los sabores de
Regular-expressions.info
regulares admiten hasta 99 grupos de captura y referencias inversas de dos dígitos
)
.
NOTA: esto no pertenece al motor de expresiones regulares de Java, ni a los motores de expresiones regulares de PHP o .NET. - Para disminuir la sobrecarga causada por el almacenamiento de las capturas en la pila
- Podemos agregar más agrupaciones a expresiones regulares existentes sin arruinar el orden de captura de grupos.
Además, solo hace que nuestros partidos sean más limpios :
Puede usar un grupo sin captura para retener los beneficios de organización o agrupación pero sin los gastos generales de la captura.
No parece una buena idea volver a factorizar las expresiones regulares existentes para convertir la captura en grupos sin captura, ya que puede arruinar el código o requerir demasiado esfuerzo.