Regex pour débutants : comment écrire des expressions régulières
Regex pour débutants
Les expressions régulières — regex — sont des motifs qui décrivent du texte. Avec les regex, vous pouvez rechercher des chaînes, valider des entrées, extraire des données et effectuer des recherches-remplacements complexes à l'aide d'une seule expression compacte. Une fois que vous maîtrisez les fondamentaux, les regex deviennent l'un des outils les plus puissants de votre boîte à outils de programmation.
Qu'est-ce qu'une expression régulière ?
Une regex est une séquence de caractères définissant un motif de recherche. Le motif \d{3}-\d{2}-\d{4} correspond à un numéro de sécurité sociale américain : trois chiffres, un trait d'union, deux chiffres, un trait d'union, quatre chiffres.
Les moteurs d'expressions régulières existent dans pratiquement tous les langages de programmation — JavaScript, Python, Java, Ruby, Go — tous avec une prise en charge intégrée.
Caractères littéraux
La plupart des caractères correspondent à eux-mêmes. Le motif cat correspond à la chaîne littérale « cat » partout où elle apparaît.
Pattern: cat
Matches: "cat" in "The cat sat on the mat."
Matches: "cat" in "catalog"
La correspondance littérale est simple mais limitée. La vraie puissance vient des métacaractères.
Métacaractères
Ces caractères ont une signification spéciale et doivent être échappés avec \ pour correspondre littéralement :
. ^ $ * + ? { } [ ] \ | ( )
Classes de caractères
Les classes de caractères correspondent à un caractère parmi un ensemble.
Notation entre crochets
| Motif | Correspondances |
|---------|---------|
| [aeiou] | Toute voyelle |
| [0-9] | Tout chiffre |
| [a-zA-Z] | Toute lettre |
| [^0-9] | Tout caractère qui n'est PAS un chiffre |
Classes prédéfinies
| Abréviation | Description |
|-----------|-------------|
| \d | Tout chiffre (identique à [0-9]) |
| \w | Lettre, chiffre ou trait de soulignement |
| \s | Espace, tabulation, saut de ligne |
| \D | Tout caractère non numérique |
| \W | Tout caractère non alphanumérique |
| \S | Tout caractère non blanc |
| . | Tout caractère sauf le saut de ligne |
Quantificateurs
Les quantificateurs contrôlent combien de fois l'élément précédent doit apparaître.
| Quantificateur | Signification | Exemple | Correspondances |
|------------|---------|---------|---------|
| * | Zéro ou plus | a* | "", "a", "aa" |
| + | Un ou plus | a+ | "a", "aa", "aaa" |
| ? | Zéro ou un | colou?r | "color", "colour" |
| {3} | Exactement N | \d{3} | "123" |
| {2,4} | Entre N et M | \d{2,4} | "12", "123", "1234" |
Exemples
\d+ → "42" in "Answer is 42"
https?:// → "http://" and "https://"
Ancres
Les ancres correspondent à des positions, pas à des caractères.
| Ancre | Signification |
|--------|---------|
| ^ | Début de la chaîne |
| $ | Fin de la chaîne |
| \b | Frontière de mot |
| \B | Frontière de non-mot |
^hello → matches "hello" only at the start
end$ → matches "end" only at the end
\bword\b → matches "word" as a whole word, not inside "sword"
Groupes et alternance
Les groupes de capture ( ) extraient les portions correspondantes :
(\d{3})-(\d{4}) → "555-1234", captures "555" in group 1, "1234" in group 2
Les groupes non capturants (?: ) regroupent sans extraire :
(?:https?|ftp):// → "http://", "https://", "ftp://"
L'alternance | agit comme un OU :
cat|dog|bird → matches "cat", "dog", or "bird"
Exemples pratiques de regex
| Cas d'usage | Motif |
|----------|---------|
| Téléphone américain | \d{3}-\d{3}-\d{4} |
| E-mail (simple) | \S+@\S+\.\S+ |
| Adresse IP | \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} |
| Hashtag | #[a-zA-Z]\w* |
| Heure (HH:MM) | [01]\d|2[0-3]:[0-5]\d |
Comment tester un motif regex
Testez toujours les motifs de manière interactive :
- Saisissez votre motif regex.
- Saisissez une chaîne de test.
- Observez quelles portions correspondent en temps réel.
- Ajustez et recommencez.
Utilisez l'outil de test d'expressions régulières pour expérimenter avec des motifs. Il met en évidence les correspondances, affiche les groupes de capture et vous aide à comprendre exactement ce que fait chaque partie de votre expression.