Syntaxe, règles et exemples

Aide-mémoire regex

Toutes les règles des regex sur une page, chacune avec un exemple interactif à tester, pour qui joue à Regex Hunter et pour toute personne qui écrit des motifs.

Caractères et échappements

Détails →
SyntaxeSignification · exemple
abcles caractères a, b, c dans l'ordre
.n'importe quel caractère sauf un saut de ligne
\. \* \\un métacaractère pris littéralement
\t \n \rtabulation, saut de ligne, retour chariot

Classes et raccourcis

Détails →
SyntaxeSignification · exemple
[abc]un caractère parmi a, b ou c
[^abc]n'importe quel caractère sauf a, b ou c
[a-z]une plage : n'importe quelle minuscule
\d \Dun chiffre / un non-chiffre
\w \Wun caractère de mot [A-Za-z0-9_] / un autre caractère
\s \Sun caractère d'espacement / tout le reste
\p{L}une lettre de n'importe quelle écriture (avec le marqueur u)
SyntaxeSignification · exemple
^début du texte (d'une ligne avec m)
$fin du texte (d'une ligne avec m)
\bune limite de mot
\Bpas une limite de mot

Quantificateurs

Détails →
SyntaxeSignification · exemple
*zéro ou plus
+un ou plus
?facultatif : zéro ou un
{3}exactement 3
{2,5}entre 2 et 5
{2,}2 ou plus
*? +? ??paresseux : le moins possible

Groupes et références arrière

Détails →
SyntaxeSignification · exemple
(abc)un groupe de capture
(?:abc)un groupe qui ne capture pas
(?<name>abc)un groupe de capture nommé
\1le texte capturé par le groupe 1
\k<name>le texte capturé par un groupe nommé
a|ba ou b

Lookaround

Détails →
SyntaxeSignification · exemple
(?=abc)suivi de abc (lookahead)
(?!abc)non suivi de abc
(?<=abc)précédé de abc (lookbehind)
(?<!abc)non précédé de abc

Marqueurs

Détails →
SyntaxeSignification · exemple
iignorer la casse
gglobal : toutes les correspondances, pas seulement la première
mmultiligne : ^ et $ à chaque ligne
sdotall : . correspond aussi aux sauts de ligne
uunicode : \p{…} et \u{…}
ysticky : correspond seulement à lastIndex

Règles et exemples

01 Comment fonctionne une regex

Une expression régulière (regex) est un tout petit langage de motifs pour décrire du texte. Le moteur parcourt votre motif et le texte ensemble, de gauche à droite, en essayant d'aligner chaque partie du motif sur des caractères de la chaîne. S'il y parvient, la chaîne correspond.

Deux questions couvrent presque tout ce que vous ferez :

chaque caractère

Un motif comme cat signifie « un c, puis un a, puis un t, côte à côte ».

combien de fois

Les quantificateurs comme + et * indiquent combien de fois l'élément précédent peut se répéter.

Par défaut, une regex correspond si le motif se trouve n'importe où dans la chaîne : il n'a pas à couvrir tout le texte, sauf si vous l'ancrez.

//
✓cat
✓a cat sat
✓category
✕dog
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

Dans le jeu (JavaScript)

Dans Regex Hunter, vous écrivez le corps du motif, la partie entre les barres obliques. Le plateau marque un mot comme attrapé dès que votre motif y trouve une correspondance, n'importe où (utilisez des ancres pour plus de rigueur).

02 Caractères littéraux

La plupart des caractères correspondent à eux-mêmes. Lettres, chiffres et espaces sont tous des littéraux : regex correspond au texte « regex », 42 correspond à « 42 ». Par défaut, la casse compte : Cat ne correspond donc pas à « cat » (le marqueur i change cela).

//
✓code
✕CODE
✓decode
✓coder
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

EntraînementAcadémie : Les bases de la chasse

03 Échapper les métacaractères

Les métacaractères sont la douzaine de caractères qui ont un sens spécial en regex :

. ^ $ * + ? ( ) [ ] { } | \\ /

Pour en trouver un littéralement, placez une barre oblique inverse devant. \. correspond à un vrai point, \+ à un vrai plus, \\ à une vraie barre oblique inverse. Dans une classe de caractères, la plupart perdent leur pouvoir et n'ont pas besoin d'être échappés.

//
✓3.14
✕3x14
✕3,14
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

EntraînementAcadémie : Les bases de la chasse · Jouer : Chasses sur l'échappement

04 Le point ( . )

Le point . correspond à n'importe quel caractère sauf un saut de ligne (à moins que le marqueur s / dotall soit actif). C'est l'élément le plus surutilisé des regex : quand vous voulez dire « n'importe quelle lettre » ou « n'importe quel chiffre », une classe est plus sûre.

//
✓cat
✓cot
✓c4t
✕ct
✕caat
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

Ici, c.t exige exactement un caractère entre le c et le t : « ct » (zéro) et « caat » (deux) échouent tous les deux.

EntraînementAcadémie : Les bases de la chasse

05 Classes de caractères [ ]

Les crochets définissent un ensemble : ils correspondent à exactement un des caractères qu'ils contiennent. [aeiou] correspond à une voyelle. Un tiret définit une plage : [a-z], [0-9], [A-Fa-f0-9] (un chiffre hexadécimal). Commencez par ^ pour inverser : [^0-9] signifie « n'importe quel caractère qui n'est pas un chiffre ».

SyntaxeSignification
[abc]a, b ou c
[a-z]n'importe quelle lettre minuscule
[0-9a-fA-F]un chiffre hexadécimal
[^aeiou]tout sauf une voyelle minuscule
[.\-]un point ou un tiret littéral (dans une classe, la plupart des métacaractères sont littéraux)
//
✓C
✓F
✕H
✕c
✕7
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

Pièges

Un tiret est littéral au début ou à la fin ([-a], [a-]). Pour inclure ], échappez-le ([\]a]) : en JavaScript, [] est une classe vide, donc []a] ne fonctionne pas. ^ n'inverse que s'il est le premier caractère.

EntraînementAcadémie : Classes de caractères · Pack : Châteaux de caractères · Jouer : Chasses sur les classes de caractères

06 Raccourcis de classe

Les raccourcis de classe remplacent par une seule lettre des ensembles courants, comme \d pour n’importe quel chiffre. La majuscule est la négation de la minuscule correspondante.

SyntaxeSignification
\d \Dun chiffre [0-9] / un non-chiffre
\w \Wun caractère de mot [A-Za-z0-9_] / un autre caractère
\s \Sun caractère d'espacement (espace, tabulation, saut de ligne…) / tout le reste
\t \n \rtabulation, saut de ligne, retour chariot
//
✓order 66
✕no digits here
✓2026
✓a1b2
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

Dans le jeu (JavaScript)

En JavaScript, \d et \w ne couvrent que l'ASCII, même avec le marqueur u ; utilisez \p{L} ou \p{N} pour les autres écritures. \s couvre déjà les espaces Unicode. Au golf, ils sont bien plus courts qu'une classe écrite en entier.

EntraînementAcadémie : Classes de caractères

07 Ancres et limites

Les ancres correspondent à une position, pas à un caractère : leur largeur est nulle.

SyntaxeSignification
^début de la chaîne (ou de la ligne, avec le marqueur m)
$fin de la chaîne (ou de la ligne, avec le marqueur m)
\bune limite de mot : la frontière entre un \w et un non-\w
\Bune position qui n'est pas une limite de mot

Entourez un motif de ^…$ pour l'obliger à correspondre à la chaîne entière. \bcat\b correspond au mot entier « cat », mais pas à « category » ni à « scatter ».

//
✓cat
✓a cat sat
✕category
✕bobcat
✕concatenate
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

EntraînementAcadémie : Ancres et limites · Pack : Levez l'ancre · Jouer : Chasses sur les ancres

08 Quantificateurs

Un quantificateur indique combien de fois l'élément précédent peut se répéter.

SyntaxeSignification
*zéro ou plus
+un ou plus
?zéro ou un (facultatif)
{3}exactement 3
{2,5}entre 2 et 5
{2,}2 ou plus

Il s'applique à ce qui le précède immédiatement : un caractère, une classe ou un groupe. colou?r rend le u facultatif (correspond à « color » et à « colour ») ; (ab)+ répète la paire.

//
✕a
✓aa
✓aaaa
✕aaaaa
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

EntraînementAcadémie : Quantificateurs · Pack : Carrière des quantificateurs · Jouer : Chasses sur les quantificateurs

09 Gourmand, paresseux et possessif

Par défaut, les quantificateurs sont gourmands : ils prennent le plus possible, puis rendent des caractères si la suite du motif en a besoin. Ajoutez ? pour en rendre un paresseux : il prend le moins possible.

Exemple classique : sur <a><b>, le gourmand <.*> prend tout, alors que le paresseux <.*?> s'arrête au premier >.

//g
✓<a><b>
✓<one>two<three>
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

Possessif et atomique (absents de JavaScript)

PCRE et Java proposent aussi des quantificateurs possessifs (a*+) et des groupes atomiques ((?>…)) qui ne rendent jamais de caractères, une protection contre le backtracking catastrophique. JavaScript n'a ni l'un ni l'autre ; émulez l'atomique avec un lookahead et une référence arrière.

EntraînementAcadémie : Quantificateurs

10 Alternance et regroupement

| signifie « ou » et a la priorité la plus basse : il découpe tout le motif en alternatives, sauf si vous le délimitez avec des parenthèses. cat|dog correspond à l'un ou l'autre mot ; gr(a|e)y correspond à « gray » ou « grey », alors que gra|ey voudrait dire « gra » ou « ey ».

//
✓gray
✓grey
✕groy
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

EntraînementAcadémie : Groupes et références arrière · Jouer : Chasses sur l'alternance

11 Groupes : capturer et nommer

Les parenthèses ont deux rôles : elles regroupent des éléments pour qu'un quantificateur ou | s'applique à tous, et elles capturent ce qui a correspondu pour le réutiliser plus tard.

SyntaxeSignification
(…)groupe de capture, numéroté 1, 2, 3… de gauche à droite
(?:…)groupe non capturant : il regroupe sans rien mémoriser
(?<name>…)groupe de capture nommé

Utilisez (?:…) quand vous avez seulement besoin de regrouper (c'est plus rapide et vos numéros de groupes restent en ordre), et des noms quand un motif a plusieurs captures qui méritent une étiquette.

//
✓ab
✓abab
✓ababab
✓aba
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

EntraînementAcadémie : Groupes et références arrière · Pack : Motifs retors · Jouer : Chasses sur les groupes

12 Références arrière

Une référence arrière correspond au même texte qu'un groupe a déjà capturé. \1 renvoie au groupe 1, \2 au groupe 2, \k<name> à un groupe nommé. C'est ainsi que vous exigez une répétition :

SyntaxeSignification
(.)\1n'importe quel caractère suivi de lui-même : une lettre doublée
(.)(.)\2\1un palindrome de 4 caractères (par ex. « abba »)
(.).*\1le même caractère réapparaît plus loin
//
✓book
✓tree
✕cat
✓success
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

Référence arrière ou classe

Point essentiel : (.)\1 exige deux fois le même caractère, ce qui n'est pas la même chose que [a-z][a-z] (deux lettres quelconques). Les références arrière permettent aux regex de vérifier « la même chose, encore une fois », ce qu'une simple classe ne sait pas exprimer.

EntraînementAcadémie : Groupes et références arrière

13 Lookahead et lookbehind

Un lookaround vérifie que quelque chose apparaît (ou non) à côté de la position courante sans consommer de caractères : c'est une condition de largeur nulle.

SyntaxeSignification
(?=…)lookahead positif : suivi de …
(?!…)lookahead négatif : non suivi de …
(?<=…)lookbehind positif : précédé de …
(?<!…)lookbehind négatif : non précédé de …

Une règle de mot de passe comme « contient un chiffre et une lettre » empile des lookaheads au début : ^(?=.*\d)(?=.*[a-z]).+$. Chaque (?=…) vérifie toute la chaîne depuis la position 0, puis la correspondance continue. Dans la plupart des moteurs, le lookbehind exige une largeur fixe (ou bornée).

//g
✓16px
✓24 px
✕16pt
✕px
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

Dans le jeu (JavaScript)

JavaScript prend en charge le lookbehind depuis ES2018 : les navigateurs modernes l'exécutent sans problème, donc il fonctionne dans le jeu. Les moteurs plus anciens (et certains outils) ne l'ont pas.

EntraînementAcadémie : Lookarounds · Jouer : Chasses sur les lookarounds

14 Marqueurs

Les marqueurs sont des lettres qui modifient le comportement de tout le motif, comme i pour ignorer la casse. Dans le code, ils se placent après la barre oblique fermante (/cat/gi).

SyntaxeSignification
iignorer la casse
gglobal : trouver toutes les correspondances, pas seulement la première
mmultiligne : ^ et $ correspondent à chaque saut de ligne
sdotall : . correspond aussi aux sauts de ligne
umode unicode (active \u{…} et \p{…})
ysticky : correspond seulement à lastIndex
xétendu/verbeux : ignore les espaces et autorise les commentaires (PCRE/Python, pas JS)
//gi
✓Cat caught a CAT
✓category
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

15 Unicode et propriétés

Avec le marqueur u, vous pouvez chercher par propriété Unicode : \p{L} est n'importe quelle lettre de n'importe quelle écriture, \p{N} n'importe quel nombre, \p{Emoji} un emoji, et \P{…} inverse. \u{1F600} correspond à un point de code par sa valeur hexadécimale.

Sans u, une regex travaille sur des unités de code UTF-16 : un emoji ou un autre caractère astral compte pour deux « caractères », ce qui n'est généralement pas ce que vous voulez. Les échappements de propriétés sont la bonne façon de traiter du texte réel.

Prise en charge par les moteurs

Les échappements de propriétés existent en JavaScript (avec u), en PCRE, en Python (via le module regex), en Java et ailleurs, mais les noms exacts des propriétés diffèrent. Pour la portabilité, tenez-vous-en aux plus courantes (L, N, P, noms d'écritures).

16 Motifs courants

Voici des motifs courts et réutilisables pour les formats du quotidien : entiers, décimaux, e-mails, couleurs hexadécimales et dates ISO. Considérez les regex de « validation » comme des approximations : les vraies règles des e-mails et des URL sont bien plus touffues qu'une seule ligne.

SyntaxeSignification
^\d+$un entier positif ou nul, seul dans la chaîne
-?\d+(\.\d+)?un nombre décimal avec signe facultatif
^[\w.+-]+@[\w-]+\.[\w.-]+$la forme approximative d'un e-mail
^#?[0-9a-fA-F]{6}$une couleur hexadécimale à 6 chiffres
^\d{4}-\d{2}-\d{2}$une date ISO (AAAA-MM-JJ)
//
✓42
✓-3.14
✕3.
✕x9
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

EntraînementAcadémie : Validateurs du monde réel · Jouer : Chasses mixtes

17 Astuces pour des motifs plus courts

Le golf, c'est l'art du motif le plus court qui attrape toutes les cibles et épargne tous les innocents. Le plateau vérifie seulement si le motif correspond quelque part : vous avez donc rarement besoin d'ancres, ni de décrire le mot entier.

  • Trouvez le plus petit trait distinctif. Si toutes les cibles contiennent q et qu'aucun innocent n'en contient, la réponse est simplement q.
  • Préférez une classe à l'alternance : [cb]at bat cat|bat.
  • Les raccourcis sont courts : \d plutôt que [0-9], \w plutôt que [A-Za-z0-9_].
  • Laissez tomber les ancres, sauf si un innocent les impose. N'ajoutez ^ ou $ que pour exclure un mot presque identique.
  • Rendez les différences facultatives avec ? au lieu de créer des branches.
  • Pensez à une référence arrière quand les cibles partagent une répétition que les innocents n'ont pas.

Essayez de raccourcir ce motif. cat et bat sont des cibles, « rat » est à épargner :

//
✓cat
✓bat
✕rat
✕mat
Modifiez le motif : les correspondances s'affichent en direct Ouvrir dans le bac à sable

Envie de vous mesurer aux autres ? La chasse du jour, les packs d'entraînement et le bac à sable sont là pour mettre tout ça en pratique.

EntraînementAcadémie : Techniques de golf

18 Différences entre moteurs

Les variantes de regex sont les dialectes des différents moteurs : ils ne prennent pas tous en charge les mêmes fonctionnalités. Les grandes familles sont JavaScript, PCRE (PHP, et proche de Perl), Python (re / regex) et Java.

SyntaxeSignification
LookbehindJS (ES2018+), PCRE, Python, Java : largeur fixe dans la plupart ; PCRE/Python en acceptent davantage
Possessif / atomiquePCRE, Java, Python regex, pas JavaScript
Récursion (?R)PCRE et Python regex seulement : ni JS, ni Python re
Groupe nommé(?<n>) en JS/PCRE/.NET ; (?P<n>) en Python classique
x / marqueur verbeuxPCRE, Python, Java, pas JavaScript

Dans le jeu (JavaScript)

Le jeu évalue votre motif avec le moteur JavaScript du navigateur, donc les règles de JS s'appliquent : le lookbehind et les groupes nommés fonctionnent, les quantificateurs possessifs et la récursion non. Les testeurs interactifs de cette page utilisent le même moteur.

19 Performances et backtracking

La plupart des regex sont rapides, mais des quantificateurs imbriqués sur les mêmes caractères peuvent exploser. (a+)+$, face à une longue suite de « a » suivie d'un « ! », force le moteur à essayer un nombre exponentiel de découpages : c'est le backtracking catastrophique (un retour arrière qui s'emballe).

  • Évitez un quantificateur dans un quantificateur qui peut correspondre à la même chose ((a+)+, (.*)*).
  • Rendez les parties internes mutuellement exclusives, pour qu'il n'y ait qu'une seule façon de correspondre.
  • Ancrez avec ^/$ et préférez des classes précises à . pour réduire l'espace de recherche.
  • Dans les moteurs qui les proposent, les quantificateurs possessifs et les groupes atomiques suppriment complètement le backtracking.