Expresiones regulares

Una expresión regular, también llamada regex, es una cadena de caracteres que define un conjunto de reglas para buscar patrones específicos dentro de un texto más extenso. Estos patrones pueden abarcar desde simples coincidencias de caracteres hasta estructuras más complejas que involucran repeticiones, opciones y combinaciones.

Al usar expresiones regulares podremos conseguir el mismo resultado aplicando diferentes soluciones, esto no siempre es una ventaja positiva, puesto que podemos crear una expresión regular muy compleja que nos de la solución que buscamos y que haya una solución más sencilla. Si nuestras expresiones son muy complejas y no tenemos bien documentado su uso, el mantenimiento será complicado en futuros cambios.

El lenguaje de las expresiones regulares está compuesto por una serie de caracteres y símbolos especiales que representan diversas funciones.

Algunos de los elementos básicos incluyen:

Literales: Representan caracteres simples que deben coincidir exactamente en el texto.

El patrón sencillo qwerty requiere una coincidencia exacta. Este patrón buscará cadenas de caracteres que contengan  los caracteres qwerty, y además aparezcan en el orden en que se encuentra cada letra.

Metacaracteres: Son caracteres con significados especiales que representan clases de caracteres, repeticiones, posiciones en el texto, entre otros.

Cuantificadores: Permiten especificar la cantidad de veces que un elemento debe aparecer en el texto, como el asterisco (*) para cero o más repeticiones, el signo más (+) para una o más repeticiones, y el signo de interrogación (?) para cero o una repetición.

Agrupaciones y Capturas: Se utilizan paréntesis para agrupar elementos y realizar capturas de texto específicas dentro de una expresión regular.

Anclas: Representan posiciones específicas en el texto, como el inicio (^) y el final ($) de una línea o cadena de texto.

Las expresiones regulares se pueden utilizar en muchísimos lenguajes de programación, por lo que para cada lenguaje tendremos que comprobar si existe alguna peculiaridad y el nombre de las funciones con las que usaremos expresiones regulares.

Como elementos comunes a la hora de realizar una regex tenemos las siguientes partes

Pattern (patrón de búsqueda): El elemento central es el patrón, esto es, el patrón de búsqueda general.

Delimiter (delimitador): El inicio y el final del patrón se identifican con delimitadores. Los delimitadores son, básicamente, todos los caracteres no alfanuméricos (excepto la barra diagonal inversa). Por ejemplo, para PHP las almohadillas (#pattern#), los signos de porcentaje (%pattern%), el signo más (+pattern+) o las tildes (~pattern~) son delimitadores. La mayoría de lenguajes ya usan las comillas (“pattern”) o las barras diagonales (/pattern/).

Modifier (modificador): Pueden agregarse al patrón de búsqueda para modificar la expresión regular. Por ejemplo, el modificador i, para que no se distinga entre mayúsculas y minúsculas.

Algunos caracteres especiales de los que veremos en los patrones son los siguientes:

Caracteres especiales regex de sintaxisFunción
[]Los corchetes identifican a una clase de caracteres que siempre representa a un único carácter en un patrón de búsqueda.
()Los paréntesis identifican un grupo de caracteres formado por uno o varios caracteres y que pueden operarse unos dentro de los otros.
Funciona a modo de especificación del área (de […] hasta […]) cuando se sitúa entre dos caracteres normales.
^Limita la búsqueda al inicio de una línea (otra función: elemento de negación en clases de caracteres).
$Limita la búsqueda al final de una línea.
.Equivale a cualquier carácter.
*El número del carácter, de la clase o del grupo situado antes del asterisco puede ser aleatorio (cero incluido).
+El carácter, la clase o el grupo antes de un signo más debe aparecer como mínimo una vez.
?El carácter, la clase o el grupo antes del signo de interrogación es opcional y puede aparecer como máximo una vez.
{n}El carácter, la clase o el grupo anteriores aparecen exactamente n veces.
{n,m}El carácter, la clase o el grupo anteriores aparecen como mínimo n veces y como máximo m veces.
{n,}El carácter, la clase o el grupo anteriores aparecen como mínimo n veces o con frecuencia.
\bTiene en cuenta el límite de palabra durante la búsqueda.
\BIgnora el límite de palabra durante la búsqueda.
\dCualquier dígito; abreviatura para la clase de caracteres [0-9].
\DCualquier no dígito; abreviatura para la clase de caracteres [^0-9].
\wCualquier carácter alfanumérico; abreviatura para la clase de caracteres [a-zA-Z_0-9].
\WCualquier carácter no alfanumérico; abreviatura para la clase de caracteres [^\w].

Ver más en esta chuleta sobre expresiones regulares: https://cheatography.com/davechild/cheat-sheets/regular-expressions/

Aplicaciones prácticas de las expresiones regulares

Las expresiones regulares tienen una amplia gama de aplicaciones en el desarrollo de software, el procesamiento de texto, la manipulación de datos y más allá. Algunas de las tareas comunes que se pueden realizar con expresiones regulares incluyen:

  • Validación de formatos de entrada, como direcciones de correo electrónico, números de teléfono o códigos postales.
  • Extracción de información específica de un texto, como nombres, fechas o enlaces web.
  • Sustitución de texto, como cambiar el formato de fechas o la corrección de errores ortográficos.
  • Búsqueda y filtrado de datos en archivos de texto o bases de datos.

Algunos ejemplos de expresiones regulares serían

\d{3}-\d{3}-\d{4} à  Esta expresión regular coincide con números de teléfono en el formato ###-###-####.

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} àEsta expresión regular valida direcciones de correo electrónico según el estándar general.

\d{4}-\d{2}-\d{2} à Esta expresión regular extrae fechas en el formato año-mes-día de un texto.

Podemos probarlas en web online como:

https://regex101.com

https://www.regexpal.com

https://www.site24x7.com/es/tools/analizador-de-regex.html