java regex capture-group

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.

  1. Para evitar un número excesivo de referencias posteriores (recuerde que a veces es difícil utilizar referencias posteriores superiores a 9)
  2. 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.
  3. Para disminuir la sobrecarga causada por el almacenamiento de las capturas en la pila
  4. 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.