Testeur de regex : construire et déboguer des motifs sur votre propre texte
Une expression régulière est un petit langage destiné à décrire la forme d'un texte. Au lieu de demander « ce mot exact est-il présent ? », une regex vous permet de demander « existe-t-il une chaîne qui ressemble à ceci ? » C'est ce qui la rend puissante pour rechercher, valider, extraire et remplacer du texte dans les éditeurs de code, les fichiers de logs, les saisies de formulaires et les scripts. C'est aussi ce qui rend facile de se tromper, car un motif qui paraît correct dans votre tête peut discrètement correspondre à trop, à trop peu, ou à rien du tout.
C'est pourquoi tester de manière interactive vaut mieux que deviner. Quand vous tapez un motif et regardez les correspondances s'allumer à travers un vrai texte d'exemple, vous obtenez un retour immédiat : vous voyez ce qui a été capturé, ce qui a échappé, et quel groupe de capture a attrapé quel morceau. Notre testeur de regex s'exécute entièrement dans votre navigateur. Votre motif et votre texte d'exemple ne quittent jamais la page, vous pouvez donc coller des lignes de logs, des e-mails ou des données de production sans rien envoyer à un serveur.

Les briques de base à connaître
La plupart des motifs courants sont assemblés à partir d'un petit ensemble d'éléments. Apprenez-les et vous pourrez lire la majorité des regex que vous croiserez dans la nature.
Les classes de caractères décrivent un ensemble de caractères autorisés. [aeiou] correspond à n'importe quelle voyelle, [0-9] correspond à un chiffre, et [a-zA-Z] correspond à une lettre. Un accent circonflexe à l'intérieur des crochets nie l'ensemble, donc [^0-9] signifie « tout caractère qui n'est pas un chiffre ». Les raccourcis font gagner de la frappe : \d est un chiffre, \w est un caractère de mot (lettres, chiffres, tiret bas), \s est un espace blanc, et le point . correspond à presque n'importe quel caractère unique.
Les quantificateurs indiquent combien de fois l'élément précédent peut se répéter. * signifie zéro ou plus, + signifie un ou plus, et ? signifie zéro ou un (optionnel). Pour des comptes exacts, {3} signifie exactement trois et {2,4} signifie deux à quatre. Ainsi \d{4} correspond à une année à quatre chiffres et colou?r correspond aux deux orthographes.
Les ancres fixent un motif à une position plutôt qu'à un caractère. ^ correspond au début du texte, $ correspond à la fin, et \b marque une limite de mot. Le motif ^Error ne correspond qu'aux lignes qui commencent par « Error », ce qui est exactement ce que vous voulez lors de l'analyse de logs.
Les groupes entourent une partie d'un motif de parenthèses, à la fois pour appliquer un quantificateur à plusieurs caractères d'un coup et pour capturer le texte correspondant en vue de le réutiliser. Dans (\d{4})-(\d{2})-(\d{2}), chaque groupe capture un composant de date que vous pourrez extraire plus tard. L'alternance avec la barre verticale agit comme un « ou » : cat|dog|fish correspond à l'un quelconque des trois mots.
Les motifs que vous utiliserez vraiment
Quelques tâches récurrentes couvrent l'essentiel du travail réel. Pour attraper quelque chose d'allure e-mail, [\w.+-]+@[\w-]+\.[\w.-]+ est un point de départ pragmatique ; la validation complète d'un e-mail selon la spécification formelle est notoirement épineuse, et un motif souple est généralement le bon choix pour mettre en évidence des candidats plutôt que pour rejeter des utilisateurs.
Pour les nombres, \d+ attrape des suites de chiffres, tandis que -?\d+(\.\d+)? correspond aux négatifs et décimaux optionnels. Pour rogner les espaces de début et de fin, faites correspondre ^\s+|\s+$ et remplacez-le par rien. Pour trouver des mots dupliqués, le motif à référence arrière \b(\w+)\s+\1\b correspond à un mot suivi de lui-même, où \1 renvoie au premier groupe capturé.

Les drapeaux modifient le comportement de la correspondance
Les drapeaux sont des interrupteurs qui modifient l'ensemble du motif. Le drapeau global (g) trouve chaque correspondance au lieu de s'arrêter à la première, ce que vous voulez pour surligner toutes les occurrences. Le drapeau insensible à la casse (i) fait que error correspond aussi bien à « Error » qu'à « ERROR ». Le drapeau multiligne (m) change ^ et $ pour qu'ils correspondent au début et à la fin de chaque ligne, pas seulement du texte entier, ce qui est essentiel pour le travail ligne par ligne sur les logs. D'autres drapeaux utiles incluent s (dotall, permettant au point de correspondre aux sauts de ligne) et u pour une gestion complète de l'Unicode.
Les dialectes diffèrent légèrement selon le langage
La regex est une famille de dialectes, pas une norme unique figée. JavaScript, Python, PCRE (PHP), Java, .NET, Go et Rust s'accordent sur la syntaxe de base ci-dessus, mais ils divergent sur les détails : la prise en charge du lookbehind, la syntaxe des groupes nommés ((?<name>...) versus (?P<name>...)), les échappements de propriétés Unicode et les drapeaux existants varient tous. Un motif qui fonctionne dans un moteur peut nécessiter un petit ajustement dans un autre, il est donc payant de tester contre le dialecte que vous livrez réellement. Une fois votre motif au point, nos autres outils pour développeurs et outils de texte peuvent vous aider pour le travail connexe de nettoyage, d'encodage et de transformation des données que vous venez de faire correspondre.
Questions fréquentes
Mon texte est-il envoyé vers un serveur ?
Non. Le testeur de regex s'exécute entièrement dans votre navigateur. Votre motif et votre texte d'exemple restent sur votre appareil et ne sont jamais envoyés, son usage est donc sûr avec des données sensibles.
Quel dialecte de regex cet outil utilise-t-il ?
Il utilise le moteur de regex JavaScript intégré à votre navigateur. La syntaxe de base correspond à ce que vous connaissez de la plupart des langages, même si certaines fonctionnalités avancées diffèrent légèrement de PCRE, Python ou .NET.
Quelle est la différence entre la correspondance gourmande et la correspondance paresseuse ?
Par défaut, les quantificateurs sont gourmands et attrapent autant de texte que possible. Ajouter un point d'interrogation les rend paresseux, ils attrapent alors aussi peu que possible. Par exemple, le motif point étoile est gourmand tandis que le motif point étoile point d'interrogation est paresseux.
Comment faire correspondre un caractère spécial littéral ?
Échappez-le avec une barre oblique inverse. Pour faire correspondre un point réel, écrivez barre oblique inverse point. Il en va de même pour les autres métacaractères comme les parenthèses, les crochets, le signe plus et le point d'interrogation.
Pourquoi mon motif ne correspond-il à rien ?
Les causes courantes sont un drapeau global manquant, des ancres qui fixent la correspondance à la mauvaise position, un caractère spécial non échappé, ou des quantificateurs gourmands qui dépassent la limite attendue. Testez morceau par morceau pour trouver le coupable.
Puis-je capturer des parties de la correspondance ?
Oui. Entourez une section du motif de parenthèses pour créer un groupe de capture. Chaque groupe est rapporté séparément, ce qui vous permet d'extraire des champs tels que l'année, le mois et le jour d'une date.
