0

¿Qué significado tiene el capturar en un grupo una referencia anterior?

Por ejemplo en la expresión:

"(\w+)\s( \1)"

¿Qué función tiene "( \1)"?

Pollo
  • 1,980
  • 6
  • 21
sarid
  • 1
  • 1
  • \1 encontrar digitos repetidos – Dramaturgo Nov 24 '21 at 20:27
  • se puede hacer sin agruparlo, lo que no se es, que cambia si agrupas una referencia; para que agruparla, me refiero a " ( ) " los parenteis con una referencia dentro – sarid Nov 24 '21 at 20:37
  • Por favor, aclara tu problema específico o proporciona detalles adicionales para resaltar exactamente lo que necesitas. Tal como está escrito, es difícil saber exactamente qué estás preguntando. – Comunidad Nov 24 '21 at 22:44
  • ¿Responde esto a tu pregunta? [¿Qué significa esta expresión regular? (Referencia de expresiones regulares)](https://es.stackoverflow.com/questions/223553/qu%c3%a9-significa-esta-expresi%c3%b3n-regular-referencia-de-expresiones-regulares) – Ruslan López Nov 25 '21 at 13:42

1 Answers1

0

No tiene ninguna utilidad generar un grupo para capturar un texto que ya se capturó. Es totalmente redundante.


Explicado de cero

(\w+) es el primer grupo, porque es el primer grupo de paréntesis.

El hecho de que sea un grupo genera una captura. Eso te permite obtener el texto que coincidió por separado, o incluso usarlo dentro de la misma expresión regular.

\1 es una referencia hacia atrás. Hace referencia al texto capturado por el grupo 1 (\2 hace referencia al grupo 2, y así sucesivamente).

Por ejemplo, (\w+)\s+\1 puede coincidir con 1 o más caracteres de palabra (A-Za-z_0-9), seguido de 1 o más espacios, seguidos por exactamente el mismo texto que coincidió al principio.

Es decir, va a coincidir con cualquiera de estos textos

a        a
bla bla
@@@texto        texto!!!!!!

Pero no va a coincidir con

a   x    a
bla blX
texto!!! texto!!!

En resumen

Como el regex (\w+)\s+( \1) puede coincidir si y sólo si coincide con un texto duplicado, sería tan redundante como asignar 2 variables, una con un espacio + el texto de la otra.

Tampoco me imagino un caso práctico para exigir un espacio luego de \s+.


Caso en que sí podría servir

Podría llegar a usarse en una expresión donde (\1) sea opcional, para verificar si esa parte del patrón coincidió o no. Ejemplo:

(\w+)\s+(?:(\1)|otro texto)

Y luego en el código verificamos si existe el grupo 2.

Pollo
  • 1,980
  • 6
  • 21