Definición
Una expresión regular es un patrón que describe una forma de texto, y que permite buscar, extraer, validar o sustituir todo lo que encaje con esa forma.
En lugar de buscar una palabra concreta, describes una estructura: «tres letras, un guion y cuatro números», «una fecha», «cualquier línea que empiece por almohadilla».
Es una herramienta de propósito muy general —funciona prácticamente igual en todos los lenguajes y en la mayoría de editores— y con una fama merecida de ilegible.
Dónde es imbatible
Buscar en muchos ficheros a la vez. Encontrar todos los sitios donde aparece un patrón, no una cadena exacta. Es probablemente su uso más rentable en el día a día.
Sustituciones masivas en un editor: reordenar campos, cambiar un formato de fecha, limpiar una lista.
Extraer datos de texto con formato fijo. Sacar referencias, importes o códigos de un documento que siempre tiene la misma estructura.
Validaciones simples: que un código de producto tenga la forma esperada, que una entrada solo contenga cifras.
Limpiar datos importados: espacios sobrantes, caracteres invisibles, separadores inconsistentes.
Dónde es mala idea
Y esta lista es igual de importante:
Validar direcciones de correo. Las reglas reales del formato son mucho más complejas de lo que parece, y toda expresión «definitiva» que circula por internet rechaza direcciones válidas o acepta inválidas. La validación útil es distinta: comprobar que hay una arroba y un punto después, y verificar de verdad enviando un correo.
Analizar HTML o XML. Son estructuras anidadas y una expresión regular no sabe contar niveles. Para eso existen los analizadores.
Leer CSV con comillas y comas dentro de los campos. Mismo motivo. Ver CSV.
Analizar JSON. Hay una función para eso en todos los lenguajes.
La regla que resume estos cuatro casos: si el formato tiene estructura anidada o reglas complicadas, usa un analizador, no un patrón.
Ejemplo práctico
Importar datos desde ficheros de proveedores es donde más se usan, y donde más enseñan.
Lo que aprendí: sirven muy bien para detectar y limpiar, no para decidir. Detectar filas con formato raro, quitar caracteres invisibles que vienen de una hoja de cálculo, normalizar separadores de miles. Todo eso es trabajo suyo.
Lo que no debe hacer una expresión regular es decidir si un dato es válido a efectos de negocio. Que una referencia tenga la forma correcta no significa que exista. La forma se comprueba con el patrón; la existencia, contra los datos.
El segundo aprendizaje, sobre mantenerlas: una expresión regular escrita hoy es incomprensible dentro de dos meses, incluida para quien la escribió. Tres hábitos que lo arreglan:
Comentar qué hace, en una línea encima, en castellano.
Escribirla por partes si el lenguaje lo permite, en vez de una tira de sesenta caracteres.
Guardar los casos de prueba junto a ella: tres ejemplos que deben pasar y tres que deben fallar. Ver test unitario.
Sin eso, nadie se atreve a tocarla y se acaba escribiendo otra al lado.
Y una advertencia sobre el rendimiento: ciertas expresiones mal construidas, ante una entrada preparada a propósito, pueden tardar un tiempo desproporcionado y bloquear el proceso. Es un vector de ataque real cuando el patrón se aplica a texto que envía el usuario. Con patrones sencillos no ocurre; con patrones muy anidados, conviene tenerlo presente.
Errores comunes
- Validar correos con un patrón complicado.
- Analizar HTML o XML con expresiones regulares.
- Copiar una expresión de internet sin entenderla ni probarla.
- No documentarla.
- No guardar casos de prueba.
- Olvidar acentos y eñes al definir «letras».
- Aplicar un patrón pesado a texto que envía el usuario.
- Usarla donde había una función estándar más clara.
Cuándo usarlo
Para buscar, limpiar y extraer texto con estructura simple, y como herramienta de editor para cambios masivos — donde es difícil de superar.
La pregunta que evita el 90 % de los problemas: ¿existe ya una función o una biblioteca para este formato? Si la hay, úsala. La expresión regular es para cuando no la hay.