Qu'est-ce qu'une expression régulière ? Une explication complète
Réponse rapide
Une expression régulière est un modèle qui décrit un ensemble de chaînes. Il utilise des caractères littéraux (qui correspondent à eux-mêmes) et des métacaractères (*, +, ?, ., ^, $, [], (), {}, |, \) avec des significations particulières. Regex est utilisé pour la validation, la recherche, l'extraction et le remplacement. Utilisez notre testeur Regex gratuit pour tester des modèles par rapport au texte de votre navigateur.
Introduction
Une expression régulière (regex ou regexp) est une séquence de caractères qui définit un modèle de recherche. Le modèle est utilisé par les algorithmes de recherche de chaînes pour rechercher, faire correspondre ou remplacer du texte. Les expressions régulières sont issues de la théorie des langages formels dans les années 1950 (Stephen Kleene) et ont été adoptées dans les outils de texte Unix (grep, sed, awk) dans les années 1970. Aujourd'hui, les expressions régulières sont intégrées à pratiquement tous les langages de programmation et éditeurs de texte. Regex est puissant – il peut valider les formats de courrier électronique, extraire des données des journaux et trouver des modèles complexes – mais la syntaxe est dense et notoirement difficile à lire.
Pas à pas
-
Comprendre les caractères littéraux et métacaractères
Les caractères littéraux (a, b, 1, @) se correspondent. Les métacaractères ont des significations particulières : . correspond à n'importe quel caractère, * signifie zéro ou plus, + signifie un ou plusieurs, ? signifie zéro ou un, ^ correspond au début, $ correspond à la fin.
-
Apprendre les classes de personnages
Les crochets [] définissent une classe de caractères — [aeiou] correspond à n'importe quelle voyelle, [0-9] correspond à n'importe quel chiffre, [^0-9] correspond à n'importe quel autre chiffre. Classes abrégées : \d (chiffre), \w (caractère de mot), \s (espace) et leurs négations majuscules.
-
Utiliser des quantificateurs
Les quantificateurs précisent combien de fois un motif se répète : * (0+), + (1+), ? (0 ou 1), {n} (exactement n), {n,} (n+), {n,m} (n à m). Gourmand par défaut ; ajouter ? pour une correspondance paresseuse (par exemple, *?).
-
Groupe et ancre
Les parenthèses () créent des groupes de capture. Alternance | correspond à chaque côté (chat | chien). Les ancres ^ et $ correspondent au début et à la fin de la chaîne. Utilisez-les pour créer des modèles complexes à partir de modèles plus simples.
Exemples
Faites correspondre un modèle de type e-mail
Saisir: Pattern: [a-z]+@[a-z]+\.[a-z]+
Sortir: Correspondances : [email protected], [email protected]
Faire correspondre un format de numéro de téléphone
Saisir: Pattern: \d{3}-\d{3}-\d{4}
Sortir: Matches: 555-123-4567
Extraire les paires clé-valeur
Saisir: Pattern: (\w+)=(\w+)
Sortir: Matches 'key=value' with group 1 as key, group 2 as value
Problèmes courants
- Les correspondances gourmandes surconsomment —.* correspond autant que possible. Utiliser .*? pour une correspondance paresseuse pour trouver la correspondance la plus courte.
- Oublier d'échapper les caractères spéciaux —., *, +, ?, etc. sont spéciaux. Utilisez \ pour les faire correspondre littéralement (par exemple, \. correspond à un point littéral).
- Retour en arrière catastrophique : les modèles avec des quantificateurs imbriqués (par exemple, (a+)+) peuvent prendre un temps exponentiel sur certaines entrées, provoquant des attaques ReDoS.
- Sur-correspondance : sans ancres (^ et $), un modèle correspond n'importe où. Utilisez ^...$ pour faire correspondre la chaîne entière.
Conseils
- Commencez simplement et ajoutez de la complexité progressivement : déboguer une expression régulière complexe en une seule fois est très difficile.
- Utilisez un testeur d'expressions régulières pour expérimenter des modèles par rapport à un exemple de texte : consultez les correspondances mises en évidence en temps réel.
- Commentez les expressions rationnelles complexes en utilisant le mode étendu (indicateur /x dans certains moteurs) ou divisez-les en parties nommées.
- Utilisez notre testeur Regex pour tester instantanément des modèles dans votre navigateur – sans inscription, entièrement privé.