Pourquoi maîtriser les regex ?
Les expressions régulières sont un outil universel en programmation. Que vous validiez des formulaires, parsiez des logs, fassiez du search-and-replace dans votre IDE, ou construisiez des routes URL — les regex sont partout. Investir quelques heures pour les maîtriser vous fera gagner des centaines d'heures sur le long terme.
Construire une regex pas à pas
Prenons l'exemple de la validation d'un numéro de téléphone français :
0[1-9] — commence par 0 suivi d'un chiffre de 1 à 9
[\s.-]? — séparateur optionnel (espace, point ou tiret)
\d{2} — deux chiffres
- Répétez 4 fois les deux dernières parties :
([\s.-]?\d{2}){4}
- Résultat :
0[1-9]([\s.-]?\d{2}){4}
Pièges courants
Le backtracking catastrophique
Des patterns comme (a+)+b peuvent causer un temps exponentiel sur certaines entrées. Utilisez des quantificateurs possessifs ou des groupes atomiques quand c'est possible.
Oublier d'échapper les métacaractères
Le point . matche tout caractère. Pour un point littéral, utilisez \.. Même chose pour * + ? ( ) [ ] { } | ^ $ \.
Glouton vs non-glouton
.* est glouton : il capture le maximum possible. .*? est non-glouton : il capture le minimum. Pour matcher une balise HTML, utilisez <.+?> plutôt que <.+>.
Validation trop permissive ou restrictive
Un pattern d'email trop simple acceptera des adresses invalides. Un trop strict rejettera des adresses valides. En production, préférez une bibliothèque de validation dédiée.
Regex dans différents langages
- JavaScript :
/pattern/flags ou new RegExp('pattern', 'flags'). Méthodes : .test(), .match(), .replace(), .matchAll()
- Python : module
re. re.search(), re.findall(), re.sub(). Support des lookbehinds de longueur variable avec le module regex
- PHP : fonctions
preg_match(), preg_match_all(), preg_replace(). Utilise le moteur PCRE2 très puissant
- Java : classes
Pattern et Matcher. Le flag Pattern.UNICODE_CHARACTER_CLASS active le support Unicode pour \d, \w, etc.