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.
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 : ».
| (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.
+ 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.
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.
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 →