Les expressions régulières (Regex) fournissent une notation algébrique concise pour rechercher, valider et extraire des motifs textuels complexes dans des flux de données.
1. Fondements de la Grammaire Regex
Les motifs évaluent les caractères de manière littérale (ex. : abc) ou via des métacaractères représentant des classes spécifiques :
\d: N’importe quel chiffre (0-9).\w: Tout caractère de mot (lettres, chiffres, souligné).\s: Tout espace blanc (espace, tabulation, saut de ligne).[a-z0-9]: Ensembles de caractères personnalisés.
2. Quantificateurs Gourmands vs Paresseux
Par défaut, les quantificateurs * et + sont gourmands (greedy) : ils capturent la plus longue séquence possible. L’ajout d’un point d’interrogation (*? ou +?) les rend paresseux (lazy), ciblant la plus courte sous-chaîne.
3. Assertions Lookahead et Lookbehind
Les assertions à largeur zéro vérifient la présence de motifs sans consommer de caractères :
(?=...)Lookahead Positif : Correspond si le motif est suivi de l’expression.(?!...)Lookahead Négatif : Correspond si le motif N’est PAS suivi de l’expression.(?<=...)Lookbehind Positif : Correspond si le motif est précédé de l’expression.(?<!...)Lookbehind Négatif : Correspond si le motif N’est PAS précédé de l’expression.
4. Prévention du Backtracking Catastrophique (ReDoS)
Face à des quantificateurs imbriqués (comme ([a-zA-Z]+)+$) et un texte non correspondant, un moteur à rétroaction explore un nombre exponentiel de combinaisons (O(2^n)), provoquant un déni de service (ReDoS).