¡Hola!
Últimamente me he puesto a aprender expresiones regulares y me he decidido por venir a crear un pequeño tutorial con lo que he aprendido hasta el momento de esta característica que poseen casi todos los lenguajes de programación.
¿Qué son las expresiones regulares?Son una potente herramienta que nos permite encontrar un texto en alguna cadena mediante un patrón de búsqueda.
Ejemplo:
Patrón: ca
Coincidencias: acampar, casa, precario, mueca.
Como pueden ver, en el anterior ejemplo coinciden las palabras que tienen la sílaba ca.
Sintaxis- Inicio y fin de patrónPara determinar en qué lugar queremos que el patrón comienze a buscar en la cadena (principio o final), podemos usar los siguientes símbolos:
^: Buscar al
inicio de una cadena.
Patrón: ^la
Coinciden: lagarto, lambada, lago, lata.
No coinciden: hola, bola, colateral.
$: Buscar al
final de una cadena.
Patrón: la$
Coinciden: bola, cola, empolla, cebolla.
No coinciden: lagarto, colateral, etc...
Metacaracteres- El punto (.)Esto es por decir algo así el "metacaracter superior", puede reemplazar cualquier caracter (letras, números, símbolos) excepto los saltos de línea.
Patrón: mo.a
Coincidencias: mora, mota, mola, moca, mo_a, mo9a, mo-a, mo#a, etc...
- CuantificadoresSirven para indicarle al patrón que un elemento se va a repetir
indeterminadas veces. Existen tres tipos de cuantificadores:
+: Sirve para indicarle al patrón que el caracter anterior al símbolo más (+) se va a repetir
una o más veces.
Patrón: come+
Coinciden: comee, comeee, comeeeeee, etc..
No coincide: come.
*La palabra "come" no coincide debido a que su último caracter no se repite ninguna vez.*
*: Con este símbolo (asterisco) estamos especificando que el anterior caracter al asterisco (*) puede repetirse
cero o más veces.
Patrón: cocoa*
Coinciden: coco, cocoa, cocoaa, cocoaaa, etc...
Otro ejemplo:
Patrón: coco*a
Coinciden: coca, cocoa, cocooa, cocoooa, etc...
?: El signo de interrogación se usa para indicar que el último caracter antes del signo de pregunta (?) puede repetirse
cero o una vez.
Patrón: casa?
Coinciden: cas, casa.
No coinciden: casaa, casaaa, casaaaa, etc...
Además de los símbolos cuantificadores comunes, también se puede definir la
cantidad de veces que se puede repetir un caracter, para ello se usan las llaves;
{ }, entre las que se establecerán los parámetros indicando cuantas veces se repite el caracter.
Patrón: casa{3}
Coincide: casaaa (debido a que la "a" se repite el número indicado entre llaves, en este caso tres).
No coinciden: cas, casaa, casaaa, etc... (contrario a lo anteriormente mencionado).
Como siempre, el cuantificador puede estar ubicado en cualquier lugar del patrón, ejemplo:
Patrón: cas{2}a
Coincide: cassa.
No coinciden: casa, casssa, cassssa, etc...
Aunque también se puede especificar un intervalo entre qué cantidad de veces debe estar el caracter:
Patrón: casa{2,5}
Coinciden: casaa, casaaa, casaaaa y casaaaaa.
No coinciden: casa, casaaaaaa, etc... (no coinciden debido a que el caracter no se repite la cantidad de veces especificada: más de dos y menos de cinco).
- RangosLos rangos nos sirven para
indicar cuáles caracteres son válidos para comparar. Están delimitados por las llaves cuadradas, o corchetes:
[ ]. No necesariamente deben estar todos los caracteres o metacaracteres especificados dentro de los corchetes, basta con que esté uno para que la condición se cumpla.
Patrón: [mp]adre
Coincide con: padre y madre.
También es válido especificar un intervalo entre las letras del abecedario, indicando en cuál comenzar y en cuál terminar:
Patrón: M[a-e]r
Coinciden: mar, mbr, mcr, mdr, mer.
*Si se quiere que sean todas las letras del abecedario se pone: "[a-z]" para todo en mayúsculas, "[A-Z]" para todo en minúsculas y "[a-Z]" para no distinguir entre ambas.*
Lo anteriormente mencionado también se puede realizar con un intervalo numérico:
Patrón: Yo tengo [2-5] carros
Coinciden: Yo tengo 2 carros, Yo tengo 3 carros, Yo tengo 4 carros y Yo tengo 5 carros.
No coinciden: Yo tengo 6 carros, Yo tengo 7 carros, etc...
Aunque también se pueden combinar varios rangos, dependiendo de la posición de los caracteres en la cadena, ejemplo:
Patrón: [GT][2-4][J-L]
Coinciden: G2K, T3J, etc..
Nota: dentro del rango el caracter ^ contará como un negador, es decir: "[^a-z]" coincidirá con cualquier caracter que no sea una letra.- AgrupadoresCumplen casi la misma función que los paréntesis en las matemáticas, osea, sirven para agrupar (valga la redundancia) un subconjunto. Esto hace que lo tome como si fuera un caracter. Se delimitan por los paréntesis:
( ).
Patrón: (abc)+ (como vimos anteriormente, el caracter, en este caso "abc", debe repetirse una o más veces).
Coinciden: abc, abcabc, abcabcabc, etc...
No coinciden: ab, abab, abcab, etc...
Veamos otro ejemplo:
Patrón: ca(sca)?da (como ya sabemos, el caracter, "sca", puede repetirse cero o una vez)
Coinciden: cada y cascada.
- AlternadorEn las expresiones regulares, está permitido alternar entre varios valores, ya sea en un agrupador o en un rango. El método de uso es separando las alternativas con una barra vertical:
|. Ejemplo:
Patrón: colombian(as|os)
Coinciden: colombianas y colombianos.
También está el método con rangos:
Patrón: c[ae|1-3]da
Coinciden: cada, ceda, c1da, c2da y c3da.
- Escapado de caracteresSi queremos escribir en un patrón metacaracteres, pero queremos que este los interprete como caracteres normales, debemos escaparlo, poniendo una barra invertida:
\ justo antes del metacaracter que deseemos escapar. Esto hace que el metacaracter sea leido de forma literal y no interpretada
En fin, ese ha sido el tutorial sobre expresiones regulares, pronto publicaré un nuevo tutorial en donde hablaré y explicaré las funciones en las que se utilizan las expresiones regulares. Nos vemos.