Aide-mémoire regex pour débutants

Une expression régulière est un modèle de recherche : \d{4} trouve quatre chiffres à la suite, ^ et $ fixent la correspondance au début et à la fin, et les parenthèses capturent les parties que vous voulez réutiliser. Cet aide-mémoire réunit la syntaxe dont vous aurez le plus besoin, avec des modèles pour l'e-mail, les numéros de téléphone et les dates testés sur de vraies données. Essayez chaque exemple dans le testeur de regex de cette page au fil de la lecture.

8 min de lecture

L'essentiel en une minute

La plupart des caractères se trouvent eux-mêmes : chat trouve les lettres c, h, a, t dans cet ordre, n'importe où dans le texte, y compris à l'intérieur de rachat. Quelques caractères ont un sens spécial : . ^ $ * + ? ( ) [ ] { } | et la barre oblique inverse. Pour en chercher un tel quel, placez une barre oblique inverse devant : \. trouve un vrai point et \$ un signe dollar.

Les exemples suivent la syntaxe JavaScript, celle qu'exécutent les navigateurs, Node.js et le testeur de cette page. Python, PHP (PCRE), Java et .NET en partagent presque tout ; les différences portent surtout sur le lookbehind, la syntaxe des groupes nommés et quelques échappements. Tapez un modèle dans Expression régulière sans les barres obliques autour, collez du texte dans Texte de test, et chaque correspondance est surlignée.

Essayez ici : Testeur de regex

Ouvrir la page complète de l'outil

Caractères et classes

Une classe de caractères trouve un seul caractère parmi un ensemble. [aeiou] trouve une voyelle, [a-z] une lettre minuscule ASCII, [^0-9] tout ce qui n'est pas un chiffre. Entre crochets, la plupart des caractères spéciaux perdent leur sens, donc [.?] trouve un point ou un point d'interrogation. Mettez le trait d'union en premier ou en dernier si vous voulez un trait d'union littéral : [-.] ou [.-].

ModèleTrouveExemple
.N'importe quel caractère sauf un retour à la lignec.t trouve cat, cot, c7t
\dUn chiffre de 0 à 9\d\d trouve 42 dans Salle 42
\wLettre, chiffre ou tiret bas (ASCII seulement)\w+ trouve user_01
\sEspace, tabulation ou retour à la lignea\sb trouve a b
\D \W \SL'inverse de \d, \w et \s\D trouve le x de 4x4
[abc]Un caractère parmi a, b ou cgr[ae]y trouve gray et grey
[^abc]Tout caractère sauf a, b ou c[^,]+ trouve le texte entre les virgules
\p{L}Une lettre de n'importe quelle langue (flag u)\p{L}+ trouve café et Straße
\bLimite de mot (aucun caractère)\bchat\b trouve chat mais pas rachat

Quantificateurs, ancres et groupes

Les quantificateurs indiquent combien de fois l'élément qui les précède se répète. Les ancres trouvent une position, pas un caractère. Les groupes rassemblent des parties d'un modèle, capturent ce qu'elles ont trouvé et permettent de choisir entre plusieurs possibilités.

ModèleSignificationExemple
*0 fois ou plusab*c trouve ac, abc, abbc
+1 fois ou plus\d+ trouve 7 et 2026
?0 ou 1 fois (facultatif)colou?r trouve color et colour
{3}Exactement 3 fois\d{3} trouve 555
{2,4}Entre 2 et 4 fois\d{2,4} trouve 12, 123, 1234
{2,}2 fois ou plusa{2,} trouve aa et aaaa
*? +? ??Non gourmand : le moins possible<.+?> trouve <b> et </b> séparément
^Début du texte (ou de la ligne avec le flag m)^Erreur trouve Erreur seulement au début
$Fin du texte (ou de la ligne avec le flag m)\.pdf$ trouve les noms qui finissent par .pdf
(abc)Groupe capturant, réutilisable avec $1(\d{4})-(\d{2}) capture l'année et le mois
(?:abc)Groupe sans capture(?:ab)+ trouve ababab
(?<annee>\d{4})Groupe nommé, réutilisable avec $<annee>Apparaît sous le nom annee dans le tableau des groupes
a|ba ou bchat|chien trouve l'un ou l'autre mot
(?=x) (?!x)Suivi de x, non suivi de x\d+(?=px) trouve 16 dans 16px
(?<=x) (?<!x)Précédé de x, non précédé de x(?<=\$)\d+ trouve 25 dans $25

Les flags

Les flags (ou drapeaux) changent le comportement de tout le modèle. Dans le testeur, ce sont des cases à cocher à côté du modèle ; dans du code JavaScript, ils suivent la barre oblique de fin, comme dans /chat/gi.

  • g (global) : trouve toutes les correspondances au lieu de s'arrêter à la première. Indispensable pour tout remplacer.
  • i (ignorer la casse) : Chat, CHAT et chat correspondent tous à chat.
  • m (multiligne) : ^ et $ s'appliquent au début et à la fin de chaque ligne, pas seulement du texte entier. Utile pour les journaux (logs) et les listes.
  • s (dotAll) : le point inclut aussi les retours à la ligne, donc .* peut s'étendre sur plusieurs lignes.
  • u (Unicode) : active \p{L} et les autres échappements de propriété, traite les emoji et les autres caractères hors du plan de base comme un seul caractère, et refuse les échappements inconnus.
  • y (sticky) : la correspondance doit commencer exactement là où la précédente s'est arrêtée. Sert surtout à écrire des analyseurs lexicaux.

Modèles testés pour l'e-mail, le téléphone et les dates

Ces modèles ont été vérifiés sur des exemples valides et non valides. Ajoutez ^ au début et $ à la fin quand vous validez un champ de saisie entier, et retirez-les quand vous cherchez à l'intérieur d'un texte plus long.

E-mail : [\w.+-]+@[\w-]+(\.[\w-]+)+ trouve marie.dupont+news@mail.example.com et a@b.co, et refuse moi@localhost parce qu'il exige un point dans le domaine. C'est le modèle E-mail sous Modèles courants dans le testeur. Aucune regex ne peut confirmer qu'une adresse existe vraiment ; pour cela, envoyez un e-mail de confirmation. La grammaire officielle des adresses (RFC 5322) autorise des formes qu'un modèle pratique devrait de toute façon refuser.

Téléphone au format international E.164 : \+[1-9]\d{6,14} trouve +14155552671 et +33612345678, le format utilisé par les API d'envoi de SMS et d'appels (un plus, l'indicatif du pays et 15 chiffres au maximum en tout). Pour les numéros français écrits à la main, 0[1-9](?:[\s.-]?\d{2}){4} trouve 06 12 34 56 78, 06.12.34.56.78 et 0612345678. Pour les numéros américains, \(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4} trouve (555) 123-4567, 555.123.4567 et 5551234567 ; il accepte aussi une parenthèse non fermée comme (555 123-4567, donc normalisez les numéros en ne gardant que les chiffres avant de les enregistrer. Pour trouver des numéros internationaux mélangés dans un texte, comme +44 20 7946 0958 ou +1 (555) 123-4567, utilisez le modèle Téléphone sous Modèles courants dans le testeur.

Date au format ISO AAAA-MM-JJ : \d{4}-\d{2}-\d{2} trouve tout ce qui a la forme d'une date. Une version plus stricte, (19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]), refuse le mois 13 et le jour 00 mais accepte encore 2026-02-31. La regex vérifie la forme ; vérifiez que le jour existe avec les fonctions de date de votre langage.

Reformatez des dates avec le remplacement : cherchez (\d{4})-(\d{2})-(\d{2}), cochez Remplacer par, tapez $3/$2/$1 dans le champ à côté, et 2026-10-26 devient 26/10/2026, le format habituel en France. Avec $3.$2.$1, vous obtenez 26.10.2026, courant en Suisse et en Allemagne.

Erreurs fréquentes et comment les corriger

  • Oublier d'échapper le point : example.com trouve aussi exampleXcom. Écrivez example\.com.
  • Correspondance gourmande : <.+> sur <b>gras</b> trouve toute la chaîne. Utilisez la version non gourmande <.+?> ou une classe négative <[^>]+>.
  • Ancres manquantes dans une validation : \d{5} accepte abc12345xyz parce qu'il y trouve cinq chiffres. Utilisez ^\d{5}$, par exemple pour un code postal français.
  • Croire que \w trouve les lettres accentuées : sans le flag u, il ne couvre que A-Z, a-z, 0-9 et _. Le é de café n'est donc pas une lettre pour \w. Utilisez \p{L} avec le flag u pour les noms dans n'importe quelle langue.
  • Oublier le flag g : le remplacement ne change que la première correspondance, et le testeur n'en montre qu'une.
  • Quantificateurs imbriqués comme (a+)+ ou (\w+\s?)+$ : sur certains textes, ils prennent un temps exponentiel, ce qu'on appelle le retour arrière catastrophique (catastrophic backtracking). Le testeur arrête un modèle au bout de 1,5 seconde et vous le signale ; réécrivez-le pour que chaque partie ne puisse correspondre que d'une seule façon.
  • Analyser du HTML ou du JSON avec une regex : correct pour une recherche rapide, peu fiable pour une vraie analyse. Utilisez un analyseur (parser) pour tout ce qui est imbriqué.

Construire un modèle pas à pas

Commencez par un morceau littéral du texte que vous cherchez, par exemple 2026-10-26, et vérifiez qu'il est trouvé. Remplacez ensuite les parties une à une par des classes : \d{4}-10-26, puis \d{4}-\d{2}-\d{2}. Après chaque modification, regardez ce qui est surligné en plus dans le texte de test, et ajoutez quelques lignes qui ne doivent pas correspondre. Un bon texte de test contient à la fois les cas voulus et les cas presque justes.

Ouvrez le tableau Correspondances pour voir la position et chaque groupe capturé de chaque correspondance. Si un groupe montre la mauvaise partie, déplacez les parenthèses. Quand le modèle fonctionne, copiez-le tel quel dans votre code : JavaScript et le testeur utilisent le même moteur, le résultat sera donc identique.

Étape par étape

  1. Tapez le modèleÉcrivez l'expression dans Expression régulière, sans barres obliques, ou choisissez-en une sous Modèles courants.
  2. Choisissez les flagsCochez g pour toutes les correspondances, i pour ignorer la casse, m pour des ancres ligne par ligne et u pour les lettres de toutes les langues.
  3. Collez un texte de testAjoutez un texte avec des exemples qui doivent correspondre et d'autres qui ne doivent pas. Les correspondances sont surlignées pendant la saisie.
  4. Vérifiez les groupesLisez le tableau Correspondances pour les positions et les groupes capturés.
  5. Prévisualisez un remplacementCochez Remplacer par, puis saisissez $1, $<nom> ou $& dans le champ à côté pour voir le résultat avant de l'utiliser dans votre code.

Questions fréquentes

Que signifie .* dans une regex ?

N'importe quel caractère, zéro fois ou plus, autant que possible. C'est gourmand : .* va jusqu'à la fin de la ligne ; utilisez .*? pour vous arrêter au premier endroit possible.

Quelle est la différence entre + et * ?

+ exige au moins une répétition, * accepte aussi zéro. \d+ exige un chiffre, \d* correspond même à une chaîne vide.

Comment chercher un point, un crochet ou un point d'interrogation littéral ?

Placez une barre oblique inverse devant : \. \[ \? . Entre crochets, le point et le point d'interrogation sont déjà littéraux, donc [.?] fonctionne aussi.

Pourquoi ma regex marche dans un langage et pas dans un autre ?

Les variantes diffèrent dans les détails : prise en charge du lookbehind, syntaxe des groupes nommés ((?<nom>) contre (?P<nom>) en Python), traitement de \w et de l'Unicode. La syntaxe de base, comme les classes, les quantificateurs et les ancres, est la même partout.

Le texte que je teste est-il envoyé quelque part ?

Non. Le testeur fonctionne dans un worker en arrière-plan de votre navigateur, donc vos journaux et vos données restent sur votre appareil. Il fonctionne aussi hors connexion une fois la page chargée.

Une regex peut-elle valider entièrement une adresse e-mail ?

Non. Elle peut refuser les fautes de frappe évidentes, mais seul l'envoi d'un e-mail prouve que l'adresse existe. Gardez un modèle simple et confirmez par e-mail.