Générateur Regex
Constructeur visuel de regex + testeur en direct. 12 motifs préconçus (email, URL, IPv4, carte, date ISO), génère du code JS/Python/PHP/Java/Ruby/Go.
Générateur Regex - Constructeur visuel et testeur d'expressions régulières
Les expressions régulières sont le langage universel de la correspondance de motifs, inventé par le mathématicien Stephen Kleene en 1951 et intégré dans presque tous les outils de traitement de texte jamais écrits — grep, sed, awk, la bibliothèque de chaînes de chaque langage de programmation moderne, chaque base de données avec clause LIKE, chaque framework de validation de formulaires, la recherche-remplacement de chaque éditeur de code. Ce constructeur élimine les deux principaux points douloureux de l'écriture de regex à la main : oublier la syntaxe exacte pour les classes de caractères, quantificateurs et ancres, et ne jamais être sûr de ce que fait réellement votre motif avant de le tester sur des chaînes réelles. La bibliothèque livre 12 motifs prêts pour la production couvrant 80% des cas (email RFC 5322, URLs HTTP/HTTPS, téléphone US/international, IPv4, date ISO, heure 24h, noms d'utilisateur, mots de passe forts, couleurs hex, cartes de crédit, code postal US, balises HTML). Les Composants Rapides permettent de cliquer pour insérer \d \w \s . ^ $ \b * + ? () [] | {n} {n,m} dans votre motif à la position du curseur — sans avoir à mémoriser la syntaxe. Le testeur en direct exécute votre motif contre l'entrée pendant que vous tapez, met en évidence les correspondances, affiche les groupes capturés et produit une explication en clair de chaque composant. Quand vous êtes satisfait, le bouton Générer le Code produit des extraits idiomatiques pour JavaScript, Python (module re), PHP (preg_match), Java (Pattern/Matcher), Ruby et Go (paquet regexp) — à coller directement dans votre projet.
Qu'est-ce qu'une expression régulière ?
Une expression régulière (regex) décrit un motif qui permet de rechercher, valider ou manipuler du texte.\n\n**Usages courants :** validation d'email, numéro de téléphone, mot de passe, extraction de données, nettoyage de journaux, contrôle d'API.\n\n**Syntaxe de base :**\n- Littéraux : `abc` correspond à « abc »\n- Classes : `\d` chiffre, `\w` lettre/chiffre, `\s` espace, `.` tout caractère\n- Quantificateurs : `*` (0+), `+` (1+), `?` (0 ou 1), `{n}`, `{n,m}`\n- Ancres : `^` début, `$` fin, `\b` frontière de mot\n- Groupes : `(...)` capturant, `(?:...)` non capturant\n- Ensembles : `[abc]`, `[a-z]`, `[^abc]`\n\nExemples : validation d'email `^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$`, numéro US, URL ou mot de passe complexe.
Comment utiliser ce générateur ?
1. **Point de départ** : sélectionnez un motif dans la bibliothèque ou saisissez votre regex. Utilisez les composants rapides pour insérer la syntaxe correcte.\n2. **Drapeaux** : activez g (global), i (insensible), m (multiligne) ou s (dotall) selon vos besoins.\n3. **Tests** : ajoutez un texte d'essai et cliquez sur « Tester le motif » pour visualiser les correspondances, positions et groupes.\n4. **Explication** : le bouton « Expliquer » détaille chaque segment de la regex pour mieux la comprendre.\n5. **Code** : générez le code prêt à l'emploi pour JS, Python, PHP, Java, Ruby ou Go.
Quelles sont les meilleures pratiques regex ?
- Débutez simple puis complexifiez.\n- Utilisez des ancres (^, $) pour éviter les correspondances partielles.\n- Préférez les classes précises (`[A-Z]`, `\d`) plutôt que `.*`.\n- Évitez les chaînes de quantificateurs qui causent un backtracking massif.\n- Ajoutez des groupes non capturants `(?: )` quand vous n'avez pas besoin de capturer.\n- Testez vos motifs avec plusieurs cas limites et Activez l'explication pour vérifier la logique.
Comment fonctionnent les groupes et backreferences ?
Les groupes capturants `()` extraient des sous-chaînes et permettent l'utilisation de backreferences. Exemple : `(\d{4})-(\d{2})-(\d{2})` capture année/mois/jour. Les backreferences `\1`, `\2` font référence aux groupes correspondants (ex. `\b(\w+)\s+\1\b` détecte les mots répétés). Utilisez `(?: )` pour grouper sans capturer lorsque seules les alternances/compositions vous intéressent.

Comment éviter les problèmes de performance ?
Les regex peuvent provoquer un backtracking catastrophique lorsque des quantificateurs gourmands sont imbriqués (`(a+)+b`). Pour l'éviter :\n- Limitez les `.*` et préférez des classes spécifiques\n- Utilisez des quantificateurs paresseux (`*?`, `+?`) lorsque nécessaire\n- Ajoutez des ancres pour restreindre la recherche\n- Testez avec de longues chaînes\n- Surveillez les performances via l'outil de test intégré\n- Documentez vos motifs pour les maintenir facilement
Pourquoi mon regex correspond-il trop ou pas assez ? (Gourmand vs Paresseux)
Par défaut, chaque quantificateur (* + ? {n,m}) dans une regex est GOURMAND (greedy) — il capture autant de caractères que possible tant que le reste du motif peut encore correspondre. Le piège classique : contre l'entrée '<b>foo</b><i>bar</i>', le motif '<.*>' retourne toute la chaîne au lieu de juste '<b>'. La solution est de rendre le quantificateur PARESSEUX (lazy) en ajoutant ? : '<.*?>' retourne '<b>' d'abord, puis '</b>', puis '<i>', puis '</i>' séparément. Règle pratique : quand la suite de votre motif est un caractère littéral (comme le > de fermeture), utilisez des quantificateurs paresseux. Quand vous voulez consommer jusqu'à la FIN de l'entrée, utilisez gourmand. Mieux encore, remplacez .* par une classe de caractères négative — '<[^>]*>' est plus rapide que '<.*?>' car il évite complètement le backtracking. C'est aussi la cause #1 du 'backtracking catastrophique' qui peut bloquer un moteur regex pendant des secondes sur une entrée de 100 caractères.
Quelle est la différence entre groupes capturants, non capturants et nommés ?
Les parenthèses en regex servent à trois objectifs distincts que les débutants confondent souvent.\n\n(1) Groupe capturant : (\d{4}) — correspond ET sauvegarde le texte capturé pour récupération ultérieure via $1/\1/match.groups[1]. Chaque paire de parenthèses simples crée un nouveau groupe numéroté.\n\n(2) Groupe non capturant : (?:\d{4}) — correspond mais NE sauvegarde PAS le résultat. Utilisez-le quand vous avez seulement besoin de parenthèses pour grouper (par exemple appliquer un quantificateur à plusieurs caractères, ou pour une alternance comme (?:cat|dog)s?). Sauter la capture a deux avantages : sortie plus propre et exécution légèrement plus rapide.\n\n(3) Groupe nommé : (?<year>\d{4}) — capture et donne au groupe un nom significatif. Accédez via match.groups.year (JS), m.group('year') (Python) ou m['year'] (Ruby). Utilisez les groupes nommés dès que votre regex a 3+ captures — '$1', '$2', '$3' deviennent vite illisibles, mais '${year}-${month}-${day}' s'autodocumente. Supporté dans JavaScript moderne (ES2018+), Python, Perl, PHP, Ruby, .NET.
Pourquoi le motif email de la bibliothèque ne correspond-il pas à toutes les adresses email valides ?
Parce que la grammaire RFC 5322 complète pour les adresses email valides dépasse 6 000 caractères de regex et est impraticable à utiliser. Le motif de la bibliothèque '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' est le compromis pragmatique standard de l'industrie — il accepte 99%+ des adresses du monde réel tout en rejetant celles manifestement malformées (pas de @, pas de domaine, pas de TLD). Ce qu'il manque : motifs légitimes mais rares comme parties locales entre guillemets ('John Doe'@example.com), domaines IP littéraux (user@[192.168.1.1]), noms de domaine internationalisés (user@münchen.de) et nouveaux TLDs introduits après 2011. Ce qu'il autorise mais qui est techniquement invalide : un point initial ('[email protected]') et points consécutifs. Pour la production, la seule validation d'email vraiment sûre est d'envoyer un email de confirmation — toute regex est un filtrage préalable, pas une garantie. Utilisez le motif pour rejeter les fautes de frappe ; vérifiez la propriété via un lien de confirmation.
