Expresiones regulares

Author
Por Darío Rivera
Publicado el en RegExp

Las expresiones regulares (regex o regexp) son secuencias de caracteres que definen patrones de búsqueda. Son usualmente utilizadas en validaciones de datos y búsqueda y reemplazo de texto. El día de hoy veremos a grandes rasgos los elementos esenciales de las expresiones regulares y cómo construirlas.

Literales

Los literales son caracteres sin significado especial. Entre estos caracteres encontramos por ejemplo letras, números, y algunos símbolos. Básicamente, un caracter es literal sino es un metacaracter.

Se pueden realizar búsquedas de caracteres literales simplemente escribiendo los caracteres en cuestión. Por ejemplo.

hola
Coincidirá con hola.

20% off
Coincidirá con 20% off.

Tú token es %&4ñ1@
Coincidirá con Tú token es %&4ñ1@.

Metacaracteres

Los metacaracteres son caracteres no alfa-numéricos con significado especial. El objetivo de ellos es apoyar en la búsqueda de patrones. Estos caracteres son:

^ . [ ] $ ( ) | * + ? { } \

La diferencia con estos caracteres radica como lo dice su definición en su significado especial. La mayoría de estos caracteres no realizará una conincidencia en su búsqueda a menos que se escapen. Veamos estos ejemplos.

Los caracteres \[\] definen clases de caracteres
Coincidirá con Los caracteres [] definen clases de caracteres.

La expresión \(2n \+ 2\)\/2 siempre resulta par
Coincidirá con La expresión (2n + 2)/2 siempre resulta par.

A su vez, estos caracteres pueden agruparse de acuerdo a su funcionalidad como veremos a continuación.

Cuantificadores

Los cuantificadores son caracteres especiales utilizados después de un token para indicar la cantidad de veces que puede ocurrir.

Caracter Significado
? Indica cero o una ocurrencia
* Indica cero o más ocurrencias
+ Indica una o más ocurrencias
{n} Indica exactamente n ocurrencias
{n,} Indica mínimo n ocurrencias o más
{n,m} Indica mínimo n ocurrencias y máximo m ocurrencias

Veamos algunos ejemplos.

registros?
Coincidirá con registro, registros.

ox*o
Coincidirá con oo, oxo, oxxo, ...

ho+la
Coincidirá con hola, hoola, hooola, ...

FU4{2}1
Coincidirá con FU441.

F3{2,}X
Coincidirá con F33X, F333X, F3333X, ...

78{2,3}TX
Coincidirá con 788TX, 7888TX.

Comodín

El caracter punto ( . ) coincidirá con un caractér simple. Veamos algunos ejemplos.

Z4.Q
Coincidirá con Z4aQ, Z4bQ, Z4LQ, Z4%Q, Z4*Q, ... incluso con el caracter espacio Z4 Q.

Clases o conjuntos de caracteres

Los caracteres ( [ ] ) definen un conjunto de caracteres como patrón. La coincidencia se presentará con cada caractér dentro del conjunto. Veamos algunos ejemplos.

[abc]
Coincidirá con a, b, c.

[ab12]
Coincidirá con a, b, 1, 2.

[a-z]
Coincidirá con cualquier letra minúscula individual del abecedario: a, b, c, ... z.

[a-zA-Z]
Coincidirá con cualquier letra minúscula o mayúscula individual del abecedario: a, b, c, ... z, A, B, C, ... Z.

[0-9]
Coincidirá con cualquier dígito: 0, 1, 2, ... 9.

Podemos combinar los cuantificadores con estas clases de caracteres para indicar la cantidad de veces que puede ocurrir cualquiera de los elementos del grupo.

registro[s]?
Coincidirá con registro, registros.

[abc]{3}
Coincidirá con abc, acb, bac, bca, cab, cba.

X[123456789]+
Coincidirá con X1, X2, X3, ... X11, X12, X13, ... X99, ... X999, ...

a[a-z]?
Coincidirá con a, aa, ab, ac, ... az.

También puedes realizar la negación u opuesto de una clase abreviada agregando el caracter ^.

[^0-9]
Coincidirá con cualquier caracter no dígito: f%r, ... &.

Clases de caracteres abreviadas

Debido a que hay clases de caracteres que son comúnmente utilizadas existen abreviaciones para representar dichas clases las cuales veremos a continuación.

Abreviación Clase Coincidencia
\d [0-9] Dígito
\D [^0-9] Ningún dígito
\s [ \t] Espacio o tab
\S [^ \t] Ningún espacio ni tab
\w [A-Za-z0-9_] Caracteres alfanuméricos mas el caracter "_"
\W [^A-Za-z0-9_] Ningún caracter alfanumérico ni "_"

A continuación dos ejemplos sencillos. Podrás intuir de manera fácil los demás.

\d
Coincidirá con cualquier dígito: 0, 1, 2, ... 9.

\D
Coincidirá con cualquier caracter no dígito: a, R, %, ... #.

Algunos programas de edición de texto podrían agregar clases de caracteres abreviadas particulares. Es el caso de vim con las siguientes abreviaciones.

Abreviación Clase Coincidencia
\l [a-z] Letras minúsculas
\u [A-Z] Letras mayúsculas
\a [a-zA-Z] Caracteres alfabéticos

Grupos

Los caracteres ( ( ) ) permiten agrupar segmentos de una expresión regular con el fin de aplicar cuantificadores o restricciones de alternación al grupo entero. Veamos los siguientes ejemplos.

(abc)+
Coincidirá con abc, abcabc, abcabc ...

([a-z][0-9])+
Coincidirá con pares letra-dígito una o más veces: a9, x2l6, j4t7p5, u8u7d8e8 ...

([0-9]{2}){2}
Coincidirá cuatro dígitos cualesquiera: 0000, 0109, 2019, 8439 ...

[0-9]+([.][0-9]+)?
Coincidirá con cualquier número entero o decimal: 10, 7.8, 14.5813, 0.366 ...

Alternación

La alternación permite realizar una coincidencia de una expresión regular simple de una lista de expresiones regulares. Veamos algunos ejemplos.

a|b
Coincidirá con a o b.

hola|hello|salut
Coincidirá con hola, hello, salut.

[a-z]|[0-9]
Coincidirá con una letra o dígito: a, Z, r, 8, 6 ...

#([a-z]|[0-9])#
Coincidirá con una letra o dígito encerrados por el caracter #: #a#, #Z#, #r#, #8#, #6# ...

Anclas

Las anclas no hacen coincidencia con ningún caracter en específico, su significado es meramente posicional. Estos metacaracteres indican la posición en la que se debe dar una coincidencia.

Caracter Significado
^ Debe coincidir al comienzo de la cadena
$ Debe coincidir al final de la cadena

Hasta ahora hemos visto coincidencias exactas. Sin embargo, cabe aclarar que las coincidencias se pueden dar en torno a un contexto más amplio. Observemos la siguiente expresión.

[a-z]+
Esta expresión coincidirá con cualquier palabra en minúscula como por ejemplo: hola, esperar, texto, computador, etc. Sin embargo, esta coincidencia se puede dar en un contexto de oración.

Las expresiones regulares son sencillas.

En la anterior oración encontramos cuatro coincidencias con nuestra expresión regular, la primera palabra contiene una letra mayúscula por lo cuál no entra en la coincidencia. Ahora bien, si utilizamos las anclas para delimitar la posición de nuestra coincidencia así ^[a-z]+$, la coincidencia no sería ninguna. Esto es así, porque estamos indicando que la cadena a evaluar tiene que comenzar con una letra minúscula y terminar con una letra minúscula. Veamos más ejemplos.

^[a-zA-Z]+
Esta expresión coincidirá con la primera palabra de una cadena.

Tres tristes tigres
Hola mundo
Las expresiones regulares son sencillas
588 mensajes leídos

Observa que la última línea no genera coincidencia debido a que comienza con un número.


Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.