🧰 ToolPicoTous les outils →
AccueilBlog › Pourquoi mon regex ne correspond pas ?

Pourquoi mon regex ne correspond pas ? Lire ses correspondances étape par étape

Un motif qui fonctionnait hier échoue soudain sur une nouvelle entrée, ou capture bien trop de texte d'un coup. Plutôt que de retoucher le motif au hasard, la manière la plus rapide de comprendre ce qui se passe est de lire attentivement ce que l'outil a réellement capturé — correspondance par correspondance, groupe par groupe.

Sommaire

Lire un tableau de correspondances comme un diagnostic

Réponse rapideChaque ligne du tableau des correspondances contient le texte capturé, sa position dans la chaîne et le contenu de chaque groupe de capture ; comparer ces trois informations à ce que vous attendiez révèle presque toujours pourquoi un motif se comporte de façon inattendue.

Quand une regex « ne marche pas », le réflexe est souvent de réécrire le motif entier au hasard. Une approche plus fiable : garder le motif tel quel, coller le texte problématique, puis regarder ligne par ligne ce que l'onglet Correspondances a réellement trouvé — pas ce qu'on pense qu'il aurait dû trouver. Un groupe vide alors qu'on attendait du texte, une position de départ décalée d'un caractère, ou une correspondance qui s'arrête plus tôt que prévu : ce sont ces détails, visibles directement dans le tableau, qui pointent vers la cause exacte.

Exemple hypothétique : un motif censé capturer un numéro de commande au format CMD-1234 ne retourne aucune correspondance sur Réf : CMD-1234. En observant qu'aucune ligne n'apparaît du tout dans le tableau (plutôt qu'une correspondance partielle), on comprend que le problème vient probablement d'une ancre ^ en tête de motif qui exige que la chaîne commence exactement par CMD — alors que le texte réel commence par « Réf : ».

Isoler quelle branche d'une alternance a matché

Réponse rapidePour savoir laquelle des options d'un motif avec le symbole | (alternance) a été utilisée dans une correspondance donnée, entourez chaque branche de son propre groupe nommé : celui qui contient du texte capturé indique le chemin emprunté, les autres restent vides.

Prenons un motif hypothétique qui doit reconnaître soit un numéro de téléphone, soit un e-mail, dans un champ de contact générique : (?<tel>\d{10})|(?<email>[\w.]+@[\w.]+). Sur l'entrée « 0612345678 », le tableau des correspondances affiche un groupe tel rempli et un groupe email vide pour cette ligne ; sur « contact@exemple.fr », c'est l'inverse. Sans ce découpage en groupes nommés, on saurait seulement qu'« une correspondance a eu lieu », sans pouvoir dire laquelle des deux branches de l'alternance a réellement été suivie — une distinction essentielle si le code applicatif doit ensuite traiter différemment un numéro et une adresse e-mail.

Le piège classique : quantificateur trop gourmand

Réponse rapideLes quantificateurs comme + ou * sont « gourmands » par défaut : ils capturent le plus de texte possible, ce qui peut fusionner deux correspondances distinctes en une seule beaucoup trop large. Ajouter un ? après le quantificateur (+?, *?) le rend « paresseux » et corrige ce comportement dans la plupart des cas.

Scénario illustratif : sur le texte <b>gras</b> et <i>italique</i>, le motif <.+> ne produit qu'une seule correspondance couvrant tout le texte, de <b> jusqu'au dernier </i> — parce que .+ gourmand cherche le > le plus loin possible dans la chaîne, pas le premier. En lisant simplement le nombre de correspondances trouvées (une seule au lieu des quatre attendues) et la longueur du texte capturé dans le tableau, le diagnostic saute aux yeux avant même de relire le motif caractère par caractère. Remplacer par <.+?> (version paresseuse) sépare correctement les quatre balises.

Vers une vue de trace visuelle (piste future)

Réponse rapideLe tableau actuel liste déjà, pour chaque correspondance, la position et les groupes capturés ; une évolution envisagée serait d'afficher en plus une trace visuelle reliant chaque sous-partie du motif à la portion de texte qu'elle a réellement matchée, dans l'ordre d'évaluation.

Concrètement, avec un motif composé de plusieurs groupes successifs comme (\d{2})-(\d{2})-(\d{4}), il serait utile de voir non seulement que le groupe 1 vaut « 29 », le groupe 2 « 07 » et le groupe 3 « 2026 », mais aussi de visualiser, sous-motif par sous-motif, quel segment exact du texte source chacun a consommé — une sorte de « pas à pas » du moteur regex construit à partir des mêmes données de correspondances et de groupes déjà disponibles aujourd'hui. Ce n'est pas encore disponible dans l'outil, mais en attendant, croiser manuellement le tableau des correspondances avec le motif d'origine, groupe par groupe, permet déjà d'arriver à la même conclusion, avec un peu plus de travail manuel.

En pratique, pour un motif à plusieurs groupes, il peut être utile de tester chaque groupe isolément (en le sortant temporairement du motif complet) pour confirmer qu'il capture ce qui est attendu, avant de le réintégrer dans l'expression complète.

Remarque sur la précision : l'outil utilise le moteur regex ECMAScript (JavaScript) du navigateur. Les exemples de cet article sont volontairement simplifiés pour illustrer une méthode de lecture des résultats ; testez toujours vos propres motifs sur vos propres données avant une mise en production.

Surlignage en direct, groupes de capture, recherche-remplacement, explication du motif et générateur de code — gratuit et 100% dans le navigateur.

Essayer le Testeur Regex →

Questions fréquentes

Mon regex ne correspond à rien du tout — par où commencer ?
Commencez par retirer les ancres ^ et $ de votre motif temporairement : si des correspondances partielles apparaissent alors qu'il n'y en avait aucune avant, le problème vient probablement d'une ancre mal placée par rapport à votre texte (espaces en début/fin de ligne, retour à la ligne inattendu). Ensuite, simplifiez le motif en retirant des morceaux un par un jusqu'à ce qu'une correspondance apparaisse, ce qui isole le sous-motif fautif.
Comment savoir laquelle des branches d'une alternance (le symbole |) a été utilisée dans une correspondance ?
Entourez chaque branche de l'alternance par son propre groupe de capture, par exemple (?<tel>\d{10})|(?<email>[\w.]+@[\w.]+) au lieu de \d{10}|[\w.]+@[\w.]+. Dans le tableau des correspondances, seul le groupe correspondant à la branche réellement utilisée contiendra un texte capturé ; les autres groupes nommés resteront vides pour cette correspondance, ce qui indique clairement quel chemin de l'alternance a été emprunté.
Pourquoi mon motif capture-t-il trop de texte (correspondance trop gourmande) ?
C'est le comportement par défaut des quantificateurs comme + ou * : ils sont « gourmands » et essaient de capturer le plus de texte possible avant de reculer si nécessaire. Par exemple, <.+> sur le texte <b>gras</b> capture tout le bloc <b>gras</b> au lieu de s'arrêter à la première balise fermante. Ajoutez un ? après le quantificateur pour le rendre « paresseux » : <.+?> s'arrête à la première occurrence de >.
Comment vérifier qu'un groupe de capture optionnel a bien été rempli ou non ?
Un groupe rendu optionnel avec un ? après la parenthèse fermante, comme (+33)?, peut soit capturer du texte soit rester vide selon que l'entrée le contient. Dans le tableau des correspondances de l'outil, un groupe non rempli pour une correspondance donnée apparaît vide ou marqué comme non défini plutôt que de faire échouer toute la correspondance — c'est le signal à observer ligne par ligne pour distinguer les entrées avec et sans indicatif, par exemple.
Existe-t-il un moyen de visualiser dans quel ordre les sous-motifs ont matché le texte ?
Aujourd'hui, l'outil liste chaque correspondance avec sa position et ses groupes dans un tableau, ce qui permet déjà de reconstituer manuellement quel segment de texte correspond à quel groupe. Une vue « trace » visuelle plus poussée — reliant chaque sous-motif du regex à son segment de texte correspondant, dans l'ordre d'évaluation — est une piste d'amélioration envisagée pour une future version, en s'appuyant sur les mêmes données de correspondances et de groupes déjà calculées.

Guides connexes

À propos de ce guide : les exemples numériques et de motifs regex de cet article sont fournis à titre illustratif pour expliquer une méthode de lecture des résultats ; ils ne constituent pas un conseil technique, juridique ou de conformité pour un cas d'usage spécifique. Testez toujours vos propres motifs sur vos propres données avant une mise en production.