Tutoriel sur les Expressions Régulières : Un Guide pour Débutants sur les Regex

· 12 min de lecture

Table des Matières

Que Sont les Expressions Régulières et Pourquoi les Apprendre ?

Les expressions régulières (communément abrégées en regex ou regexp) sont des outils puissants de correspondance de motifs qui vous permettent de rechercher, valider, extraire et manipuler du texte en utilisant une syntaxe spécialisée. Considérez-les comme un langage de recherche sophistiqué qui va bien au-delà des simples opérations de "rechercher et remplacer".

Imaginez que vous devez extraire toutes les adresses e-mail d'un fichier contenant des milliers de lignes de données de journal, ou valider que le numéro de téléphone d'un utilisateur suit le format correct. L'utilisation de méthodes traditionnelles de manipulation de chaînes entraînerait un code verbeux et difficile à maintenir. Les expressions régulières peuvent accomplir ces tâches avec un seul motif concis.

À la base, les expressions régulières définissent des motifs de recherche en utilisant une combinaison de caractères littéraux et de métacaractères spéciaux. Ces motifs peuvent correspondre à des chaînes simples comme "cat" ou à des structures complexes comme des adresses e-mail, des URL ou des numéros de carte de crédit.

Pourquoi Devriez-Vous Apprendre les Expressions Régulières ?

Applications Réelles

Les expressions régulières sont largement utilisées dans le développement logiciel et le traitement de données :

Conseil pro : Bien que les regex soient puissantes, elles ne sont pas toujours le meilleur outil pour chaque tâche. Pour analyser des données structurées complexes comme HTML ou JSON, utilisez plutôt des analyseurs dédiés. Les regex fonctionnent mieux pour la correspondance de motifs dans du texte brut.

Syntaxe de Base et Fondamentaux

Les expressions régulières se composent de deux types de caractères : les caractères littéraux (qui correspondent à eux-mêmes) et les métacaractères (qui ont des significations spéciales). Commençons par les fondamentaux.

Caractères Littéraux

La regex la plus simple est simplement du texte brut. Le motif cat correspondra à la chaîne exacte "cat" dans votre texte.

Texte : "The cat sat on the mat"
Regex : cat
Correspond : "The cat sat on the mat"

Les caractères littéraux sont sensibles à la casse par défaut, donc cat ne correspondra pas à "Cat" ou "CAT" sauf si vous utilisez un indicateur insensible à la casse.

Le Métacaractère Point (.)

Le point . est un joker qui correspond à n'importe quel caractère unique sauf les caractères de nouvelle ligne.

Texte : "cat", "cot", "cut", "c@t"
Regex : c.t
Correspond : Les quatre chaînes

Pour correspondre à un caractère point littéral, échappez-le avec une barre oblique inverse : \.

Texte : "file.txt"
Regex : file\.txt
Correspond : "file.txt" (pas "fileAtxt")

Ancres : Correspondance de Positions

Les ancres ne correspondent pas à des caractères—elles correspondent à des positions dans le texte.

Accent Circonflexe (^) - Début de Ligne : L'ancre ^ correspond au début d'une chaîne ou d'une ligne.

Texte : "cat\ndog\ncat"
Regex : ^cat
Correspond : Seulement le premier "cat"

Signe Dollar ($) - Fin de Ligne : L'ancre $ correspond à la fin d'une chaîne ou d'une ligne.

Texte : "cat\ndog\ncat"
Regex : cat$
Correspond : Seulement le dernier "cat"

Combinaison d'Ancres : Utilisez les deux pour correspondre à des lignes entières.

Regex : ^cat$
Correspond : Seulement les lignes contenant exactement "cat" sans rien avant ou après

Limites de Mots (\b)

L'ancre \b correspond aux limites de mots—positions entre caractères de mot et non-mot.

Texte : "cat category caterpillar"
Regex : \bcat\b
Correspond : Seulement le mot autonome "cat"

C'est incroyablement utile pour trouver des mots entiers sans correspondre à des mots partiels.

Séquences d'Échappement

Les caractères spéciaux dans les regex doivent être échappés avec une barre oblique inverse pour les faire correspondre littéralement :

Caractères Spéciaux Forme Échappée
. * + ? ^ $ { } [ ] ( ) | \ \. \* \+ \? \^ \$ \{ \} \[ \] \( \) \| \\

Exemple de correspondance d'un prix :

Regex : \$\d+\.\d{2}
Correspond : "$19.99", "$5.00"

Classes de Caractères et Plages

Les classes de caractères vous permettent de définir un ensemble de caractères et de correspondre à n'importe lequel d'entre eux. Elles sont entourées de crochets.

Classes de Caractères de Base

Les crochets [] créent un ensemble de caractères qui correspond à n'importe quel caractère unique à l'intérieur.

Texte : "cat", "cot", "cut", "cit"
Regex : c[aou]t
Correspond : "cat", "cot", "cut" (pas "cit")

Plages de Caractères

Utilisez des traits d'union pour définir des plages de caractères :

Texte : "a1", "b2", "c3", "d4"
Regex : [a-c][1-3]
Correspond : "a1", "b2", "c3" (pas "d4")

Classes de Caractères Niées

Utilisez un accent circonflexe ^ au début d'une classe de caractères pour la nier—correspondant à n'importe quel caractère NON dans l'ensemble.

Regex : [^0-9]
Correspond : N'importe quel caractère qui n'est PAS un chiffre
Texte : "abc123def"
Regex : [^a-z]+
Correspond : "123" (la séquence de lettres non minuscules)

Classes de Caractères Prédéfinies

Les regex fournissent des raccourcis pour les classes de caractères courantes :

Raccourci Équivalent Description
\d [0-9] N'importe quel chiffre
\D [^0-9] N'importe quel non-chiffre
\w [a-zA-Z0-9_] N'importe quel caractère de mot
\W [^a-zA-Z0-9_] N'importe quel caractère non-mot
\s [ \t\n\r\f\v] N'importe quel caractère d'espacement
\S [^ \t\n\r\f\v] N'importe quel caractère non-espacement

Exemple de correspondance d'un numéro de téléphone simple :

Regex : \d{3}-\d{3}-\d{4}
Correspond : "555-123-4567"

Conseil rapide : Les versions majuscules des classes raccourcies sont toujours la négation de leurs homologues minuscules. \d correspond aux chiffres, \D correspond aux non-chiffres.

Quantificateurs : Contrôler la Répétition des Correspondances

Les quantificateurs spécifient combien de fois un caractère ou un groupe doit être mis en correspondance. Ils sont placés après l'élément que vous souhaitez répéter.

Quantificateurs de Base

Exemples de Quantificateurs en Action

Astérisque (*) - Zéro ou Plus :

Regex : ca*t
Correspond : "ct", "cat", "caat", "caaat"

Plus (+) - Un ou Plus :

Regex : ca+t
Correspond : "cat", "caat", "caaat" (pas "ct")

Point d'Interrogation (?) - Optionnel :

Regex : colou?r
Correspond : "color" et "colour"

Compte Exact {n} :

Regex : \d{3}
Correspond : Exactement trois chiffres comme "123"

Plage {n,m} :

Regex : \d{2,4}
Correspond : 2 à 4 chiffres comme "12", "123", ou "1234"

Quantificateurs Gourmands vs. Paresseux

Par défaut, les quantificateurs sont gourmands—ils correspondent au maximum de texte possible. Ajouter ? après un quantificateur le rend paresseux (correspondant au minimum possible).

Texte : "<div>content</div><div>more</div>"
Regex (gourmand) : <div>.*</div>
Correspond : "<div>content</div><div>more</div>" (chaîne entière)

Regex (paresseux) : <div>.*?</div>
Correspond : "<div>content</div>" (première balise seulement)

Quantificateurs paresseux :

Conseil pro : La correspondance gourmande peut causer des problèmes de performance avec de grands textes. Utilisez des quantificateurs paresseux lorsque vous devez correspondre à la chaîne la plus courte possible, surtout lors du travail avec des structures imbriquées.

Exemple Pratique : Correspondance de Balises HTML

Regex : <([a-z]+)>.*?</\1>
Correspond : Balises HTML appariées comme "<p>text</p>" ou "<div>content</div>"

Ce motif utilise la correspondance paresseuse pour éviter de capturer plusieurs balises à la fois, et des références arrière (couvertes ensuite) pour s'assurer que les balises d'ouverture et de fermeture correspondent.

Groupes et Capture

Les parenthèses () créent des groupes qui servent plusieurs objectifs : ils regroupent des parties d'un motif ensemble, capturent le texte correspondant pour une utilisation ultérieure, et permettent les références arrière.

Regroupement de Base

Les groupes vous permettent d'appliquer des quantificateurs à plusieurs caractères :

Regex : (ha)+
Correspond : "ha", "haha", "hahaha"

Sans regroupement, ha+ correspondrait à "ha", "haa", "haaa" (seul le 'a' se répète).

Groupes de Capture

Les groupes capturent automatiquement le texte auquel ils correspondent, que vous pouvez référencer plus tard :

Texte : "John Smith"
Regex : (\w+) (\w+)
Capture : Groupe 1 = "John", Groupe 2 = "Smith"

Dans la plupart des langages de programmation, vous pouvez accéder à ces captures :

// Exemple JavaScript
const match = "John Smith".match(/(\w+) (\w+)/);
console.log(match[1]); // "John"
console.log(match[2]); // "Smith"

Références Arrière

Les références arrière vous permettent de correspondre au même texte qui a été capturé par un groupe plus tôt dans le motif. Utilisez \1, \2, etc.

Regex : (\w+) \1
Correspond : Mots répétés comme "the the" ou "is is"
Regex : <([a-z]+)>.*?</\1>
Correspond : Balises HTML correspondantes comme "<div>...</div>"

Groupes Non-Capturants

Parfois vous avez besoin de regroupement sans capture. Utilisez (?:...) pour les groupes non-capturants :

Regex : (?:https?|ftp)://\S+
Correspond : URL commençant par http, https, ou ftp
(Le protocole n'est pas capturé comme un groupe)

Les groupes non-capturants améliorent les performances lorsque vous n'avez pas besoin de référencer le texte capturé.

Groupes de Capture Nommés

Les groupes nommés rendent votre regex plus lisible et maintenable :

Regex : (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
Correspond : Dates comme "2026-03-31"
Accès : match.groups.year, match.groups.month, match.groups.day

Les groupes nommés sont particulièrement utiles dans les motifs complexes où les références numérotées deviennent confuses.

Conseil rapide : Utilisez des groupes nommés pour les motifs complexes