Testeur Regex
Tester les expressions régulières en direct
Les expressions regulieres (regex) sont des motifs qui correspondent a du texte. Utilisees partout -- validation de saisie, recherche/remplacement, analyse de journaux. Syntaxe dense mais accessible.
Qu’est-ce qu’une regex ?
Une expression reguliere (regex ou regexp) est une sequence de caracteres qui definit un motif de recherche. Les motifs regex decrivent a quoi le texte ressemble plutot que ce qu’il signifie — ils correspondent a des sequences de caracteres, pas a une semantique.
Les expressions regulieres sont l’un des outils les plus puissants et les plus repandus en programmation. Elles apparaissent dans pratiquement tous les langages de programmation (JavaScript, Python, Java, Go, Rust), tous les editeurs de texte (VS Code, Vim, Sublime), tous les outils en ligne de commande (grep, sed, awk) et la plupart des bases de donnees (PostgreSQL, MySQL). Apprendre les regex est un multiplicateur de force — la meme syntaxe fonctionne quasiment partout.
Le compromis est la lisibilite. Les motifs regex sont denses et peuvent sembler cryptiques au premier coup d’oeil. Un motif comme ^(?=.*[A-Z])(?=.*\d)[A-Za-z\d@$!%*?&]{8,}$ est parfaitement logique une fois la syntaxe maitrisee, mais impenetrable sinon. La cle est d’apprendre les briques de base une par une.
Concepts fondamentaux
Classes de caracteres
Une classe de caracteres correspond a n’importe quel caractere unique d’un ensemble defini :
[abc]— Correspond aa,bouc[a-z]— Correspond a toute lettre minuscule[^abc]— Correspond a tout caractere saufa,bouc.— Correspond a tout caractere sauf le saut de ligne
Classes abregees
| Abreviation | Equivalent | Signification |
|---|---|---|
\d | [0-9] | Tout chiffre |
\D | [^0-9] | Tout non-chiffre |
\w | [a-zA-Z0-9_] | Tout caractere de mot |
\W | [^a-zA-Z0-9_] | Tout caractere non-mot |
\s | [ \t\n\r\f\v] | Tout espace blanc |
\S | [^ \t\n\r\f\v] | Tout non-espace blanc |
Quantificateurs
Les quantificateurs specifient combien de fois un motif doit se repeter :
| Quantificateur | Signification | Exemple |
|---|---|---|
* | 0 ou plus | a* correspond a "", "a", "aaa" |
+ | 1 ou plus | a+ correspond a "a", "aaa" mais pas "" |
? | 0 ou 1 | a? correspond a "" ou "a" |
{n} | Exactement n | a{3} correspond a "aaa" |
{n,m} | Entre n et m | a{2,4} correspond a "aa", "aaa", "aaaa" |
{n,} | n ou plus | a{2,} correspond a "aa", "aaa", … |
Ancres
Les ancres correspondent a des positions, pas a des caracteres :
^— Debut de chaine (ou de ligne en mode multiligne)$— Fin de chaine (ou de ligne en mode multiligne)\b— Limite de mot (entre\wet\W)
Groupes et alternance
(abc)— Groupe capturant : correspond aabcet le capture pour les references arriere(?:abc)— Groupe non capturant : correspond aabcsans capturera|b— Alternance : correspond aaoub
Aide-memoire regex
| Syntaxe | Nom | Description |
|---|---|---|
. | Point | Tout caractere (sauf saut de ligne) |
\d | Chiffre | [0-9] |
\w | Mot | [a-zA-Z0-9_] |
\s | Espace | Espace, tabulation, saut de ligne |
* | Etoile | 0 ou plus (gourmand) |
+ | Plus | 1 ou plus (gourmand) |
? | Interrogation | 0 ou 1 (optionnel) |
{n,m} | Plage | Entre n et m repetitions |
() | Groupe | Groupe de capture |
[] | Classe | Classe de caracteres |
^ | Accent | Debut de chaine/ligne |
$ | Dollar | Fin de chaine/ligne |
| | Barre | Alternance (OU) |
(?=) | Assertion avant | Verifie ce qui suit |
(?<=) | Assertion arriere | Verifie ce qui precede |
Assertions avant et arriere
Les assertions avant (lookahead) et arriere (lookbehind) sont des assertions de largeur nulle — elles verifient si un motif existe avant ou apres la position courante sans consommer de caracteres.
L’assertion avant positive (?=...) verifie que ce qui suit correspond a un motif. Par exemple, \d+(?= USD) correspond aux chiffres uniquement s’ils sont suivis de USD — il correspond a 100 dans “100 USD” mais pas dans “100 EUR”.
L’assertion avant negative (?!...) verifie que ce qui suit ne correspond pas. \d+(?! USD) correspond aux chiffres non suivis de USD.
L’assertion arriere positive (?<=...) verifie que ce qui precede correspond. (?<=\$)\d+ correspond aux chiffres precedes de $ — il correspond a 50 dans “$50” mais pas dans “50”.
L’assertion arriere negative (?<!...) verifie que ce qui precede ne correspond pas.
Les assertions sont de largeur nulle — elles verifient le contexte sans consommer de caracteres, de sorte que le texte correspondant n’inclut pas le motif de l’assertion lui-meme.
Motifs courants
Voici des motifs eprouves pour les taches de validation frequentes :
- Email (basique) :
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ - URL :
https?://[^\s/$.?#].[^\s]* - IPv4 :
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$ - Date (AAAA-MM-JJ) :
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ - Telephone (international) :
^\+?[1-9]\d{1,14}$ - Couleur hexadecimale :
^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$
Cas d’utilisation courants
- Validation de saisie : Verifier que les champs de formulaire contiennent des emails, numeros de telephone, codes postaux ou identifiants valides avant soumission
- Recherche et remplacement : Trouver et transformer des motifs dans des bases de code — renommer des variables, mettre a jour des imports, reformater des donnees
- Analyse de journaux : Extraire des horodatages, adresses IP, codes d’erreur et traces de pile a partir de fichiers de journaux non structures
- Extraction de donnees : Extraire des donnees structurees a partir de texte semi-structure comme les emails, PDF ou HTML
- Routage d’URL : Les frameworks web utilisent des motifs regex pour associer les URL aux fonctions de traitement
Essayez ces exemples
Ce motif correspond aux adresses email standard comme user@example.com. Il verifie la partie locale (lettres, chiffres, points, underscores), un symbole @, un nom de domaine et un TLD d'au moins 2 caracteres.
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ Cette chaine contient un double @ et des points consecutifs, que la regex d'email rejette. Le motif exige exactement un @ et n'autorise pas les points consecutifs dans le domaine.
user@@example..com