Vous tombez sur ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ dans du code et votre cerveau refuse de coopérer. Normal : les expressions régulières (regex) ressemblent à du bruit aléatoire quand on ne connaît pas la grammaire. Mais derrière cette syntaxe austère se cache un outil d'une puissance remarquable, utilisé quotidiennement par des millions de développeurs, administrateurs systèmes et analystes de données.
À quoi servent les regex
Une expression régulière est un pattern (motif) qui décrit un ensemble de chaînes de caractères. Au lieu de chercher un texte exact, vous décrivez la forme de ce que vous cherchez :
- « Un mot qui commence par une majuscule » →
[A-Z][a-z]+ - « Un numéro de téléphone français » →
0[1-9]\d{8} - « Une adresse email » → le pattern montré plus haut
Les cas d'usage sont innombrables :
- Valider des entrées utilisateur (email, téléphone, code postal)
- Rechercher des motifs dans des fichiers de logs
- Extraire des informations d'un texte (dates, montants, URLs)
- Remplacer du texte selon un pattern (renommage en masse)
- Filtrer des données dans un tableur ou une base de données
Le saviez-vous ? Les regex sont nées des travaux du mathématicien Stephen Kleene en 1951 sur les « ensembles réguliers ». Elles ont été intégrées dans les outils Unix dans les années 1970 (grep, sed, awk) et sont devenues un standard universel en informatique.
Les briques de base
Les caractères littéraux
La regex la plus simple est un texte exact. chat trouve toutes les occurrences de « chat » dans un texte (y compris dans « achat » ou « château »).
Le point : n'importe quel caractère
Le point . correspond à n'importe quel caractère unique :
c.ttrouve « cat », « cot », « c@t », « c3t »
Les classes de caractères
Les crochets définissent un ensemble de caractères possibles :
[aeiou]= une voyelle[0-9]= un chiffre[a-zA-Z]= une lettre (majuscule ou minuscule)[^0-9]= tout sauf un chiffre (le^dans les crochets signifie « sauf »)
Les raccourcis
| Raccourci | Équivalent | Signification |
|---|---|---|
\d |
[0-9] |
Un chiffre |
\w |
[a-zA-Z0-9_] |
Un caractère « mot » |
\s |
[ \t\n\r] |
Un espace blanc |
\D |
[^0-9] |
Tout sauf un chiffre |
\W |
[^a-zA-Z0-9_] |
Tout sauf un caractère « mot » |
Les quantificateurs
Les quantificateurs indiquent combien de fois le caractère précédent doit apparaître :
| Quantificateur | Signification |
|---|---|
* |
0 ou plus |
+ |
1 ou plus |
? |
0 ou 1 (optionnel) |
{3} |
Exactement 3 |
{2,5} |
Entre 2 et 5 |
{3,} |
3 ou plus |
Les ancres
^= début de ligne$= fin de ligne\b= frontière de mot
Astuce Les ancres sont essentielles pour les validations. Sans elles, le pattern \d{5} validerait « 123456789 » (il contient bien 5 chiffres consécutifs). Avec les ancres, ^\d{5}$ ne valide que les chaînes composées exactement de 5 chiffres.
Les 10 regex les plus utiles au quotidien
1. Adresse email (simplifiée)
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
2. Numéro de téléphone français
^0[1-9](\s?\d{2}){4}$
Accepte 06 12 34 56 78 et 0612345678.
3. Code postal français
^\d{5}$
4. URL
^https?://[^\s]+$
5. Date au format JJ/MM/AAAA
^\d{2}/\d{2}/\d{4}$
6. Adresse IP v4
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
7. Mot de passe fort (8+ caractères, majuscule, minuscule, chiffre)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
8. Numéro de SIRET (14 chiffres)
^\d{14}$
9. Extraction de balises HTML
<([a-z]+)[^>]*>(.*?)</\1>
10. Espace en double (pour le nettoyage de texte)
\s{2,}
Attention Les regex de validation d'email et de téléphone présentées ici sont des versions simplifiées. Pour une validation robuste en production, les cas limites sont nombreux. Utilisez les bibliothèques de validation de votre langage de programmation plutôt que des regex artisanales pour les données critiques.
Lire une regex complexe : la méthode
Face à une regex intimidante, décomposez-la de gauche à droite :
Prenons ^\d{2}/\d{2}/\d{4}$ :
^→ début de chaîne\d{2}→ exactement 2 chiffres/→ un slash littéral\d{2}→ exactement 2 chiffres/→ un slash littéral\d{4}→ exactement 4 chiffres$→ fin de chaîne
Résultat : une date au format JJ/MM/AAAA.
Les groupes et alternatives
Les parenthèses créent des groupes et le pipe | offre des alternatives :
(chat|chien)→ « chat » ou « chien »(\d{2})/(\d{2})/(\d{4})→ trois groupes capturants (jour, mois, année)
Les groupes capturants permettent d'extraire des sous-parties du match, ce qui est essentiel pour les opérations de rechercher-remplacer.
Tester vos regex
La meilleure façon d'apprendre est de pratiquer avec un retour visuel immédiat. Un bon outil de test de regex colore les matches en temps réel et explique chaque partie du pattern.
Pour tester et apprendre : Tester des expressions régulières.
Le saviez-vous ? Il existe deux grandes familles de moteurs de regex : PCRE (Perl Compatible Regular Expressions, utilisé par PHP, Python, JavaScript) et POSIX. La syntaxe de base est identique, mais les fonctionnalités avancées (lookbehind, groupes nommés) diffèrent. La plupart des outils modernes utilisent PCRE.
En résumé
Les expressions régulières ne sont pas un langage ésotérique réservé aux experts. Avec une quinzaine de caractères spéciaux et un peu de pratique, vous pouvez valider des données, rechercher des motifs et transformer du texte avec une efficacité redoutable.
Commencez par les bases (., *, +, \d, ^, $) et construisez progressivement. Gardez un outil de test de regex ouvert à côté et testez chaque pattern au fur et à mesure.