Contenido del curso
Construcción de patrones para parsing avanzado
Regex robustas para entornos de producción
- 8

Cuantificadores codiciosos vs perezosos en regex
08:07 min - 9

Anclas y bordes de palabra: buscar vs validar
08:47 min - 10

Alternancia y paréntesis: domina grupos en regex
07:43 min - 11

Grupos nombrados en regex: adiós a los números
07:15 min - 12

Lookahead y lookbehind: cómo validar sin consumir texto
07:40 min - 13

Property escapes y flags para regex Unicode
07:19 min - 14

ReDoS: cómo una regex puede tumbar tu servidor
06:42 min
Cómo piensa un motor de expresiones regulares
Resumen
Una expresión regular o regex no es magia negra ni un jeroglífico imposible: es un patrón que describe la forma del texto que buscas. Si quieres dominar esta herramienta que te ahorrará horas de trabajo, primero necesitas entender cómo razona el motor que la ejecuta, porque cuando sabes cómo lee el texto, dejas de adivinar y empiezas a controlar.
Esta guía es para quienes programan, trabajan con bases de datos o simplemente quieren dejar de temerle a esas cadenas raras que aparecen en cualquier editor de código.
Qué es una expresión regular y por qué no es texto literal
Una regex es un lenguaje para describir patrones de texto [00:41]. No es una cadena literal, sino la descripción de qué tipo de texto te interesa encontrar.
Piénsalo como un detector de juguetes al que le pides algo redondo, de plástico y de color rojo. Al detector no le importa si eso es una pelota, un carrito o un dado. Si cumple los requisitos, lo atrapa [00:58]. Una regex hace exactamente lo mismo con el texto: describe la forma de lo que buscas y deja que el motor atrape todo lo que encaja en ese molde.
¿Qué es una regex? Es un patrón que describe la forma del texto que buscas, no una cadena literal. Le dices al motor qué características debe cumplir el texto y él encuentra todas las coincidencias.
Por qué aprender el motor y no la sintaxis de cada lenguaje
Hay dos caminos para aprender regex. Puedes memorizar la sintaxis específica de Python, luego la de JavaScript, luego la de Java y descubrir que el 90% es lo mismo [01:24]. O puedes aprender cómo razona el motor: qué construcciones son universales y dónde hay diferencias.
El enfoque agnóstico gana. Trabajaremos con regex101.com como herramienta para probar patrones en tiempo real, usando PCRE2 como sabor por defecto [01:47], que es el más común. Cuando aparezca una diferencia relevante entre sabores como JavaScript, Python o .NET, se marca.
Dónde se usan las regex en el trabajo real
El mismo conocimiento sirve en muchísimos contextos profesionales. Estos son casos concretos donde una regex resuelve en segundos lo que a mano tomaría horas:
- Aislar en la terminal todos los errores de un log de 2 GB que empiecen con código cinco, usando una regex de tres caracteres.
- Validar en tu código que un nombre de usuario tenga letras, números y entre 13 y 16 caracteres, con una sola línea.
- Filtrar en MySQL o PostgreSQL clientes con correos que terminen en .gov o .edu, donde un like se queda corto.
- Validar un formulario HTML pasándole la regex directamente al navegador sin código adicional.
- Cambiar en VS Code o IntelliJ el método getUserId por fetchUserId solo cuando la ID sea un número, con un único find and replace [02:52].
Todo eso lo logras entendiendo cómo funciona un motor de regex en general.
Cómo razona un motor de regex paso a paso
El motor lee el texto como tú leerías un libro, buscando por ejemplo una palabra que empiece con M y termine en N. Empiezas por el primer carácter y, si no encaja, saltas al siguiente y reintentas desde el principio [03:19].
La regla del motor sigue cuatro pasos claros:
- Empieza en la posición cero del texto.
- Intenta emparejar el patrón desde ahí.
- Si falla, avanza una posición y reintenta desde el paso uno.
- Si tiene éxito, continúa y registra el match.
Una propiedad clave: el motor devuelve el primer match que encuentra, no el mejor ni el más largo [03:50]. A esto se le llama comportamiento ansioso o eager. En cuanto encuentra una coincidencia válida se detiene, salvo que le indiques buscar todas.
Buscar o validar: la pregunta que cambia todo
Aquí viene una distinción crítica. Si preguntas si el patrón aparece en algún lugar dentro del texto, estás buscando: el motor escanea y devuelve todos los pedazos que coinciden sin importar qué hay alrededor [04:14].
Si preguntas si todo el texto coincide de principio a fin con el patrón, estás validando y el motor responde sí o no. Misma regex, distinta pregunta, distinto resultado.
¿Cuál es la diferencia entre buscar y validar con regex? Buscar revisa si el patrón aparece en cualquier parte del texto y devuelve las coincidencias. Validar comprueba si todo el texto encaja completo con el patrón y responde sí o no.
Cuando una regex no se comporta como esperas, la primera pregunta no es si tu sintaxis está mal, sino si estás buscando o validando [04:44]. Además existen dos modos más: reemplazar, que toma el match y lo reformatea en otra salida, y dividir, que corta el texto usando las coincidencias como separadores.
Qué es el backtracking y por qué puede congelar un servidor
El backtracking es cuando el motor avanza por un camino, se da cuenta varios caracteres después de que no funciona y retrocede para probar otra ruta [05:12].
Imagina que estás en un laberinto y llegas a una bifurcación. Dejas una marca antes de entrar a un camino. Si resulta equivocado, te devuelves solo hasta la bifurcación y tomas el segundo camino. Ese mecanismo permite a la regex probar varias interpretaciones antes de rendirse.
¿Qué es el backtracking en regex? Es el proceso en que el motor retrocede a un punto anterior para probar otra interpretación cuando el camino que tomó falla. Si los retrocesos se multiplican de forma exponencial, un patrón mal escrito puede congelar un servidor.
Cómo escribir tu primera regex en regex101
Para practicar usamos un log de servidor al que aplicaremos técnicas nuevas en cada clase hasta construir un extractor de datos completo [05:54]. Ese log tiene marcas de tiempo en formato ISO, niveles de seguridad entre corchetes como info, warn, error y debug, usuarios, IPs, montos, nombres de archivos, emails y caracteres internacionales.
En regex101 pegas tu texto de prueba y escribes la regex para ver en tiempo real qué se empareja. La herramienta te dice desde qué carácter hasta qué carácter va cada match y te deja depurar el proceso en el Regex Debugger [06:57]. También puedes cambiar de sabor y generar el código listo para tu implementación en el Code Generator [07:25].
Qué hacen los flags Global y Multiline
Arriba, junto a la regex, aparecen los flags. Por defecto vienen activos dos: Global y Multiline [07:42].
- Global hace que veas todas las coincidencias del texto, no solo la primera.
- Si desactivas Global, solo verás el primer match, que recuerda no es ni el más largo ni el mejor, solo el primero.
- Multiline tiene su aplicación específica que se retoma más adelante.
Con esto listo, hagamos el primer ejercicio buscando la palabra error para capturar líneas de error.
Por qué el motor es case sensitive
Si buscas error en minúscula no obtienes ningún match, porque el motor es case sensitive, es decir, sensible a mayúsculas [08:22]. Al escribirlo en mayúscula aparecen los primeros siete matches.
Ese es el caso más simple: un carácter literal se busca a sí mismo. La regial es una cadena de cinco caracteres y el motor busca exactamente esa secuencia en el log [08:44].
Ya tuviste tu primera victoria y viste cómo el motor recorre el texto carácter a carácter. Recuerda dos ideas: buscar no es lo mismo que validar, y a veces el motor retrocede.
¿Cuál de estos casos de uso crees que aplicarías primero en tu trabajo? Cuéntame en los comentarios.