Esta es la segunda nota del tema de expresiones regulares, si no leíste la primera parte te recomiendo que la revises antes de continuar con esta lectura; porque en ella expliqué qué son las expresiones regulares, cómo funcionan y los tipos de caracteres que utilizan; en esta ocasión abordaré esas características con ejemplos.
Construyendo expresiones regulares
Algunos caracteres especiales tienen como característica que al ser utilizados afectan al subpatrón que se encuentra a su izquierda o derecha, es por eso que si se desea que afecte a un grupo de subpatrones es necesario que sean agrupados dentro de paréntesis, o bien, si es un caracter debe ponerse entre corchetes []
.
Se debe tener especial cuidado con el símbolo especial pipe |
pues este afecta a los patrones indefinidamente tanto a su izquierda como a su derecha, por lo que se deben agrupar los subpatrones que se deseen afectar junto con ella en su propio conjunto.
Ejemplo con cadenas
El miedo(es el camino al lado oscuro| lleva a la ira)\.
Esta expresión da como resultado cualquiera de las siguientes cadenas:
El miedo es el camino al lado oscuro.
El miedo lleva a la ira.
Como se puede apreciar utilizar el backslash \
permite el escape de caracteres especiales que sean requeridos como parte del patrón y no cómo parte de la expresión regular, en este caso el caracter especial es el punto .
.
Ahora incrementemos un poco la complejidad de la expresión. Supongamos que queremos obtener cualquiera de las siguientes cadenas:
El miedo es el camino al lado oscuro.
El miedo lleva a la ira.
El miedo es el camino al lado oscuro. El miedo lleva a la ira.
El miedo lleva a la ira. El miedo es el camino al lado oscuro.
Una posible solución es:
(El miedo(es el camino al lado oscuro | lleva a la ira)\. ?){1,2}
Sin embargo, esta solución también genera cadenas como:
El miedo lleva a la ira. El miedo lleva a la ira.
El miedo es el camino al lado oscuro. El miedo es el camino al lado oscuro.
Inesperadamente para muchos, esta expresión también genera la siguiente cadena:
El miedo lleva a la ira. El miedo es el camino al lado oscuro. El miedo lleva a la ira.
Esto sucede porque el patrón puede coincidir con el texto de búsqueda completo o solamente con una parte.
Otros ejemplos comunes
[3]
Coincide con el dígito 3.
[abc]
Coincide con a, b o c.
[^abc]
Coincide con cualquier caracter a excepción de a, b o c.
[a-z]?
Coincide una vez o ninguna con los símbolos {a, b, …, z}.
[A-Z]*
Coincide cero o más veces con los símbolos {A, B, …, Z}.
[A-Z]+
Coincide al menos una vez con los símbolos {A, B, …, Z}.
\d
Coincide con un dígito.
\d{1,3}
Coincide entre 1 y 3 dígitos en el patrón.
\d{4}
Coincide 4 dígitos en el patrón.
\d*
Coincide con cero o más dígitos.
coding\w
Coincide con la palabra coding seguida de cualquier símbolo de palabra [A-Za-z0-9_].
2018$
Coincide con 2018 como final de una línea o de la cadena.
^Folio
Coincide la cadena Folio al inicio de una línea o de la cadena.
Espero que estas dos notas sobre expresiones regulares te hayan sido útiles. Si quieres saber cómo utilizarlas en algunos lenguajes de programación, te recomiendo las siguientes series: aprendiendo Go y scripting en Perl.