Aller au contenu
LeedyBox
Soutenir

Testeur RegEx, remplacement et aide-mémoire

Testez des expressions régulières avec correspondances et groupes de capture surlignés, prévisualisez les remplacements et copiez le motif sous forme de code pour six langages.

Drapeaux
Correspondances: 0

Détails des correspondances et groupes de capture

Aide-mémoire

Cliquez sur un motif pour le charger avec un texte d’exemple.

Référence de syntaxe

Caractères

.N’importe quel caractère sauf un saut de ligne (avec s : y compris les sauts de ligne)
\d \DChiffre 0–9 / pas un chiffre
\w \WCaractère de mot (A–Z, a–z, 0–9, _) / le contraire
\s \SEspace blanc / pas un espace blanc
[abc] [^abc]L’un de a, b, c / tout sauf a, b, c
[a-z]Un caractère compris entre a et z
\p{L}Une lettre de n’importe quelle langue (nécessite le drapeau u)
\. \\ \(Échapper un caractère spécial pour le rechercher littéralement

Quantificateurs

* + ?0 ou plus / 1 ou plus / 0 ou 1
{n} {n,} {n,m}Exactement n / n ou plus / entre n et m
*? +? {n,m}?Paresseux : le moins de caractères possible

Ancres

^ $Début / fin du texte (de chaque ligne avec m)
\b \BLimite de mot / pas une limite de mot

Groupes et assertions

(…)Groupe capturant, utilisé comme $1, $2 …
(?:…)Groupe non capturant
(?<name>…)Groupe nommé, utilisé comme $<name>
\1 \k<name>Référence arrière : le même texte que celui capturé par un groupe
a|ba ou b
(?=…) (?!…)Suivi de / non suivi de
(?<=…) (?<!…)Précédé de / non précédé de

Remplacement

$1 $<name>Texte d’un groupe numéroté ou nommé
$& $$La correspondance entière / un $ littéral

Vérifiez les résultats avant de les utiliser. L’outil est fourni tel quel, sans garantie, et ses résultats peuvent être incomplets ou erronés. Conditions d’utilisation

Les motifs sont testés avec le moteur d’expressions régulières de JavaScript. La syntaxe et le comportement peuvent différer dans d’autres langages et bases de données. Les motifs de l’aide-mémoire sont des exemples pratiques, pas des validateurs complets.

Mode d'emploi

  1. Saisissez le motif sous « Expression régulière », sans les barres obliques qui l’entourent ni les drapeaux, et collez votre texte dans « Texte de test ». Les correspondances sont surlignées sous « Correspondances » et comptées pendant la saisie. Pour partir d’un exemple, cliquez sur un motif de l’« Aide-mémoire » ; le motif, les drapeaux, le texte de test et les réglages de remplacement actuels sont alors remplacés.
  2. Cochez les drapeaux nécessaires sous « Drapeaux » ; survolez une lettre pour voir son effet. g et u sont activés à l’ouverture de la page. Sans g, seule la première correspondance est trouvée, et seule la première est remplacée.
  3. Consultez « Détails des correspondances et groupes de capture » : chaque correspondance y figure avec sa position et le texte de chaque groupe sous la forme $1, $2, etc., avec le nom des groupes nommés. Activez le drapeau d pour voir aussi où chaque groupe commence et se termine.
  4. Pour essayer une substitution, cochez « Remplacer les correspondances par » et saisissez le texte de remplacement, en utilisant $1 ou $<name> pour les groupes. Le texte modifié s’affiche sous « Résultat du remplacement », et « Copier le résultat » le copie.
  5. Sous « Générateur de code », choisissez JavaScript, Python, Java, PHP, Go ou C# et cliquez sur « Copier le code ». L’extrait inclut le remplacement lorsque « Remplacer les correspondances par » est coché. « Copier en /motif/drapeaux » copie le motif sous forme de littéral d’expression régulière JavaScript.

Questions fréquentes

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

Non. Le motif est appliqué au texte de test dans votre navigateur, par le moteur d’expressions régulières JavaScript intégré à celui-ci, et ni l’un ni l’autre n’est envoyé à LeedyBox. L’outil ne les enregistre pas non plus.

Pourquoi mon motif trouve-t-il plus de texte que prévu ?

Un motif correspond partout où il s’applique : \d{3} trouve aussi 123 dans 12345. Ajoutez \b aux deux extrémités pour des mots ou des nombres entiers, ou utilisez ^ et $ pour exiger que tout le texte corresponde (chaque ligne, avec m activé), comme le fait le motif de mot de passe de l’aide-mémoire. \b s’appuie sur les caractères de mot de \w (A–Z, a–z, 0–9 et _) et ne considère pas les lettres comme é ou 한 comme des caractères de mot : \bcafé\b ne correspond donc pas à café lorsqu’une espace le suit. Les quantificateurs comme + et * sont en outre gourmands : sur <b>x</b>, le motif <.+> correspond à toute la chaîne, alors que <.+?> ou <[^>]+> s’arrête au premier >.

Pourquoi un motif qui fonctionne en Python, PHP ou Java affiche-t-il « Erreur RegEx » ici ?

Cette page utilise le moteur JavaScript, qui refuse certaines syntaxes d’autres moteurs, comme les groupes nommés (?P<name>…), les drapeaux en ligne comme (?i) au début, les groupes atomiques (?>…) et les quantificateurs possessifs comme a++. Écrivez les groupes nommés sous la forme (?<name>…) et utilisez les cases à cocher sous « Drapeaux » au lieu des drapeaux en ligne. Avec le drapeau u, JavaScript est aussi plus strict sur les échappements : \# provoque une erreur, tout comme \- hors des crochets ; supprimez alors la barre oblique inverse ou désactivez u.

Pourquoi \p{L} ne trouve-t-il pas les lettres, ou pourquoi un emoji compte-t-il pour deux caractères ?

Les classes de propriétés Unicode comme \p{L} nécessitent le drapeau u ; sans lui, JavaScript lit \p{L} comme le texte littéral p{L}, et . ne correspond qu’à une moitié d’un caractère situé hors du plan multilingue de base, comme de nombreux emoji. Charger un motif de l’aide-mémoire charge aussi ses drapeaux, et tous, sauf « Caractères spéciaux », laissent u désactivé : vérifiez donc « Drapeaux » avant d’ajouter ce type de syntaxe. Même avec u, . correspond à un seul point de code, et certains emoji, comme les emoji de drapeau ou un pouce levé avec une couleur de peau, en comportent deux ou plus. Les positions indiquées dans les détails des correspondances sont comptées en unités de code UTF-16, comme le fait JavaScript : les caractères situés hors du plan multilingue de base occupent donc deux positions, même avec u.

Pourquoi \n dans le remplacement n’insère-t-il pas de saut de ligne ?

Le remplacement suit les règles de replace() en JavaScript : seules les séquences commençant par $ sont spéciales, et \n et \t sont donc insérés sous la forme d’une barre oblique inverse suivie d’une lettre, et non comme un saut de ligne ou une tabulation. Le champ ne contient qu’une seule ligne : il est impossible d’y saisir un saut de ligne, ajoutez-le plutôt dans le code généré. Pour supprimer les correspondances, cochez « Remplacer les correspondances par » et laissez le champ vide, comme le fait le motif « Supprimer les balises HTML/XML » de l’aide-mémoire.

Que se passe-t-il si un motif est très lent ou trouve un très grand nombre de correspondances ?

Lorsque le navigateur autorise les Web Workers, la recherche s’exécute dans un worker en arrière-plan et est arrêtée au bout de 2 secondes : un motif à retour arrière catastrophique, comme (a+)+$ appliqué à une longue suite de a suivie d’un autre caractère, affiche alors un message au lieu de bloquer la page. Le nombre affiché sous « Correspondances » inclut toutes les correspondances, mais seules les 1 000 premières sont surlignées et listées dans les détails.

Puis-je coller le code généré tel quel dans mon projet ?

Utilisez-le comme point de départ. Le générateur écrit le motif sous forme de littéral d’expression régulière en JavaScript et sous forme de chaîne dans les autres langages, réécrit les groupes nommés et les références de remplacement lorsque la syntaxe diffère, comme (?P<name>…) et \g<1> en Python, transpose les drapeaux i, m et s, et attend votre texte dans une variable nommée text. Si le motif contient des guillemets ou des barres obliques, vérifiez que l’extrait les échappe correctement. Les moteurs restent différents : le package regexp de Go utilise la syntaxe RE2, qui ne prend en charge ni les assertions avant/arrière ni les références arrière, et le module re standard de Python ne prend pas en charge les classes \p{…} ; testez donc le code avec vos propres données.