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.