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
Cuantificadores en regex: de asterisco a llaves precisas
Resumen
Los cuantificadores en regex son el salto que convierte una expresión regular de simple buscador a herramienta potente, porque te permiten emparejar secuencias de longitud variable en lugar de un carácter a la vez. Si estás aprendiendo expresiones regulares y quieres extraer fechas, timestamps o secuencias de dígitos, aquí entiendes cómo controlar cuántas veces aparece cada elemento de tu patrón.
Un cuantificador es un símbolo que colocas después de un elemento del patrón para decirle al motor cuántas veces puede aparecer ese elemento. Y hay una regla que nunca cambia: el cuantificador siempre se aplica al elemento inmediatamente a su izquierda [00:20].
Cuáles son los cuantificadores básicos en regex
Existen tres cuantificadores básicos, y cada uno responde a una pregunta distinta sobre cuántas repeticiones necesitas.
El primero es el asterisco, el más permisivo de todos. Significa cero o más veces. La regex a* puede emparejar una sola a, una secuencia aaa, aaaaa y también una cadena vacía [00:40].
Y aquí está la trampa: si ejecutas una regex que solo tenga un asterisco, el motor encuentra coincidencias vacías en todo el texto sin consumir ningún carácter. Por eso úsalo únicamente cuando un elemento sea genuinamente opcional pero con capacidad de repetirse.
El segundo es el signo más, el más usado en producción. Significa una o más veces, así que ya no permite matches vacíos: el elemento sí o sí tiene que existir. La regex a+ empareja a, aa, aaa, pero si no hay ninguna, falla [01:20].
¿Cuándo uso + en vez de * en regex? Cuando no te sirve un resultado vacío. Pregúntate: ¿me sirve un match vacío? Si la respuesta es no, que es la mayoría de las veces, tu opción es el signo más. En el mundo real, el 90% de las veces necesitas
+y no*.
Para qué sirve el signo de interrogación
El tercero es el signo de interrogación, el operador opcional, y sirve para tolerar variantes en el texto [01:50].
colou?rempareja la palabra color tanto en inglés americano como británico, porque laues opcional al estar a su izquierda.https?empareja tanto http como https, haciendo que lasno sea un impedimento al final.
Estas variantes son justo el tipo de flexibilidad que necesitas cuando el texto no siempre viene escrito igual.
Cómo funcionan las llaves para cuantificadores precisos
Cuando los cuantificadores básicos son demasiado vagos, el metacarácter de las llaves te da control y exactitud para delimitar rangos exactos [02:20].
{N}pide exactamente N repeticiones. Por ejemplo,\d{4}es útil para años, porque tienen solo cuatro dígitos.{N,}define solo el límite inferior, sin tope superior: al menos N repeticiones.{N,M}define mínimo y máximo, incluyendo ambos. Por ejemplo, entre dos y cuatro dígitos.
Lo interesante es que los cuantificadores básicos son atajos de estos cuantificadores precisos.
¿Cuál es la equivalencia entre cuantificadores básicos y llaves? El asterisco equivale a
{0,}, el signo más equivale a{1,}y el signo de interrogación equivale a{0,1}. Son la misma idea escrita de forma más corta.
Cómo combinar cuantificadores con clases para extraer fechas
Aquí viene lo práctico. Puedes combinar cuantificadores con clases predefinidas, y esto es lo que te deja extraer estructuras completas de un log [03:10].
Si usas solo \d, obtienes dígitos sueltos. Pero para conseguir secuencias completas de dígitos, aplicas el signo más: \d+ te da uno o más dígitos seguidos. El problema es que un guion corta la secuencia, así que el año, el mes y el día se emparejan por separado [04:00].
Cómo armar el patrón de una fecha completa
Para capturar la fecha completa con guion incluido, escribes el formato exacto usando cuantificadores delimitados:
\d{4}para los años, que siempre tienen cuatro dígitos.-escrito literal, porque el guion no es un metacarácter.\d{2}para los meses, siempre dos dígitos.\d{2}para los días, también dos dígitos.
Así escribes literal la estructura de la fecha y cada match empareja una fecha entera [04:40].
¿Y si quieres el timestamp completo con la hora? La fecha y la hora están separadas por un espacio, que se representa con la clase predefinida \s. Después continúas con hora, minutos y segundos usando \d{2} para cada uno, colocando los puntos literales entre ellos, ya que el punto tampoco es metacarácter en ese contexto [05:20]. Con eso obtienes un match con toda la fecha y la hora juntas.
Estos mismos cuantificadores precisos aparecen en patrones muy comunes: fechas en ISO, horas, NIFs y direcciones. Y también los combinas con clases negadas para capturar caracteres que no sean comas, comillas o corchetes.
Ya sabes controlar cuánto repetir, desde uno o más hasta cantidades exactas, y también el riesgo de que el asterisco empareje la cadena vacía. Pero hay un detalle pendiente: los cuantificadores son codiciosos por defecto, y eso se convierte muchas veces en un gran problema. ¿Te ha pasado que tu regex captura de más? Cuéntamelo en los comentarios.