Curious TechieDev Toolbox
Todas las Guías/Procesamiento de Texto8 min read

¿Qué es una Expresión Regular (Regex)?

Motores de autómatas finitos, clases de caracteres, cuantificadores, aserciones lookahead y prevención de ReDoS.

Puntos Clave
  • Las expresiones regulares definen patrones formales procesados por motores de autómatas finitos.
  • Incluyen elementos como Clases ([a-z]), Cuantificadores (+, *) y Anclajes (^, $).
  • El Backtracking Catastrófico (ReDoS) provoca tiempos de cálculo exponenciales ante cadenas no coincidentes.
  • Las aserciones (Lookarounds) comprueban condiciones sin consumir caracteres en la coincidencia.

Las expresiones regulares (Regex) ofrecen a los desarrolladores una sintaxis algebraica compacta para buscar, validar y extraer patrones de texto en cadenas, ficheros y registros.

1. Fundamentos de la Gramática Regex

Las expresiones regulares interpretan caracteres de forma literal (ej. abc) o mediante metacaracteres que representan conjuntos de caracteres:

  • \d: Cualquier dígito numérico (0-9).
  • \w: Caracteres alfanuméricos y guión bajo.
  • \s: Espacios en blanco, tabulaciones y saltos de línea.
  • [a-z0-9]: Clases de caracteres personalizadas.

2. Cuantificadores Codiciosos vs Perezosos

Por defecto, los cuantificadores como * (0 o más) y + (1 o más) son codiciosos (greedy) y abarcan el texto más largo posible. Al añadir un signo de interrogación (*? o +?) se convierten en perezosos (lazy), coincidiendo con el fragmento más corto.

3. Aserciones Lookahead y Lookbehind

Las aserciones de ancho cero comprueban condiciones sin consumir caracteres del flujo de texto:

  • (?=...) Lookahead positivo: Coincide si el patrón va seguido de la expresión.
  • (?!...) Lookahead negativo: Coincide si el patrón NO va seguido de la expresión.
  • (?<=...) Lookbehind positivo: Coincide si el patrón está precedido por la expresión.
  • (?<!...) Lookbehind negativo: Coincide si el patrón NO está precedido por la expresión.

4. Prevención de Retroceso Catastrófico (ReDoS)

Cuando los motores NFA encuentran cuantificadores anidados ambiguos (como ([a-zA-Z]+)+$) frente a textos que no coinciden, el tiempo de evaluación escala exponencialmente (O(2^n)), congelando el hilo de ejecución en un ataque ReDoS.