Grupos y referencias inversas
Agrupa caracteres con paréntesis, ramifica con la alternancia y luego captura una coincidencia y recupérala más adelante en el mismo patrón con una referencia inversa (backreference).
Lee las reglas: Grupos: captura y nombre en la Guía →Entrénalo: Patrones con truco →
Se basa en Anclas y límites
Qué aprenderás
Pasos · 13
- 01Agrupar con paréntesisInstrucciones
- 02Un grupo es una unidadCaza
- 03Un cuantificador sobre un grupoCaza
- 04Alternancia con la barra verticalCaza
- 05Resalta las alternativasCaza
- 06Agrupar las alternativasCaza
- 07Grupos que no capturanCaza
- 08Referencias inversasCaza
- 09Un palíndromo de cinco letrasCaza
- 10Una palabra repetidaCaza
- 11Un grupo opcionalCaza
- 12Golf: sílaba repetidaCaza
- 13Captura y recuperación dominadasInstrucciones
Grupos, alternancia y referencias inversas en regex
Los paréntesis de una expresión regular forman un grupo: varios caracteres tratados como una sola unidad. Pon un cuantificador después del grupo y repetirá la unidad entera, no el último carácter. Pon una barra vertical | dentro y obtienes una alternancia, una lista de opciones de las que puede coincidir cualquiera.
Un grupo normal ( ) además captura: recuerda el texto exacto con el que coincidió, y una referencia inversa como \1 vuelve a pedir ese mismo texto más adelante en el patrón. Así es como una regex encuentra letras repetidas, comillas que cierran igual que abren o una palabra escrita dos veces. Los grupos se numeran por su paréntesis de apertura, contando desde la izquierda.
Cuando necesites agrupar pero no recordar, escribe un grupo sin captura, (?:...). Agrupa y ramifica igual que los demás y mantiene ordenada la numeración del resto de tus grupos. En una caza, un grupo bien colocado suele marcar la diferencia entre un patrón que atrapa a los monstruos y otro que también atrapa a los inocentes.
Ejemplos
Atrapa
- undo
- redo
Deja libre
- do
- outdo
- undone
El grupo separa la elección entre
unyredel resto del patrón, y las anclas frenan las palabras más largas.Atrapa
- 555-0199
- 0199
Deja libre
- 55-0199
- 555-019
- 5550-199
El
?después del grupo hace opcional todo el prefijo de zona, guion incluido, nunca solo la mitad.Atrapa
- ha!
- haha!
- hahaha!
Deja libre
- hah!
- ha
- aha!
El
+después del grupo repite elhaentero, no solo laa, así que unahsuelta antes del!queda libre.Atrapa
- "hi"
- 'ok'
- say 'yo'
Deja libre
- "hi'
- 'ok"
- no quotes
La referencia inversa hace que la comilla de cierre coincida con la que abrió el texto, sea cual sea.
Errores frecuentes
- Dejar la alternancia sin agrupar. La barra vertical tiene la prioridad más baja, así que
^red|blue$significa^redoblue$; agrupa las opciones como^(red|blue)$cuando las anclas deban aplicarse a las dos. - Usar corchetes para palabras.
[red|blue]es una clase de caracteres que coincide con una sola letra de ese conjunto (o con la propia barra vertical), no con la palabraredni conblue. - Descolocar tus referencias inversas. Un grupo de captura nuevo más a la izquierda renumera todos los que vienen detrás, y
\1de pronto apunta a otro sitio; usa(?:...)para los grupos que nunca vas a recuperar.
Lee las reglas: Grupos: captura y nombre en la Guía →Entrénalo: Patrones con truco →
Lee más: Referencias inversas en regex: patrones que recuerdan lo que encontraron →