Aide-mémoire Regex : Motifs courants & Référence rapide

· 12 min de lecture

Table des matières

Les expressions régulières sont l'un des outils les plus puissants dans la boîte à outils d'un développeur, mais elles restent intimidantes pour de nombreux programmeurs. Cet aide-mémoire complet décompose les motifs regex en sections digestes avec des exemples pratiques que vous pouvez utiliser immédiatement.

Que vous validiez des adresses e-mail, analysiez des fichiers journaux ou nettoyiez des données désordonnées, ce guide vous aidera à écrire de meilleurs motifs regex plus rapidement. Nous couvrirons tout, de la correspondance de caractères de base aux assertions lookaround avancées.

Bases des Regex

Les expressions régulières (regex ou regexp) sont des motifs utilisés pour faire correspondre des combinaisons de caractères dans des chaînes. Elles sont prises en charge dans pratiquement tous les langages de programmation—JavaScript, Python, Java, PHP, Ruby, Go, et plus—ainsi que dans les éditeurs de texte comme VS Code, Sublime Text, et les outils en ligne de commande comme grep et sed.

À la base, les motifs regex se composent de deux types de caractères : les caractères littéraux qui correspondent exactement à eux-mêmes, et les métacaractères qui ont des significations spéciales et définissent des règles de correspondance.

La regex la plus simple est une chaîne littérale. Le motif hello correspond exactement au texte "hello" partout où il apparaît. Mais la vraie puissance vient des métacaractères qui ajoutent de la flexibilité—comme faire correspondre n'importe quel chiffre, répéter des motifs ou ancrer à des positions spécifiques.

Conseil pro : Utilisez notre Testeur Regex pour expérimenter avec des motifs en temps réel. Vous verrez les correspondances surlignées instantanément pendant que vous tapez, ce qui facilite grandement la compréhension du fonctionnement des motifs.

Caractères littéraux vs Métacaractères

La plupart des caractères dans un motif regex sont littéraux—ils correspondent à eux-mêmes. Le motif cat correspond aux lettres c, a et t dans cette séquence exacte. Cependant, certains caractères ont des significations spéciales :

Par exemple, example\.com correspond littéralement à "example.com", tandis que example.com correspondrait à "exampleXcom" car le point non échappé correspond à n'importe quel caractère.

Classes de caractères

Les classes de caractères vous permettent de faire correspondre un caractère parmi un ensemble de possibilités. Elles sont le fondement de la correspondance de motifs flexible et se présentent sous deux formes : les classes abrégées prédéfinies et les expressions entre crochets personnalisées.

Motif Correspond à Exemple
. N'importe quel caractère sauf nouvelle ligne h.t → hat, hot, hit, h@t
\d N'importe quel chiffre [0-9] \d{3} → 123, 456, 789
\D N'importe quel non-chiffre \D+ → abc, xyz, @#$
\w Caractère de mot [a-zA-Z0-9_] \w+ → hello_world, var123
\W Caractère non-mot \W → @, #, espace, ponctuation
\s Espace blanc (espace, tabulation, nouvelle ligne) \s+ → toute séquence d'espaces blancs
\S Non-espace blanc \S+ → tous caractères visibles
[abc] N'importe lequel de a, b ou c [aeiou] → n'importe quelle voyelle
[^abc] Pas a, b ou c [^0-9] → n'importe quel non-chiffre
[a-z] Plage : a à z [A-Za-z] → n'importe quelle lettre
[a-z0-9] Plages multiples [a-fA-F0-9] → chiffres hexadécimaux

Classes de caractères personnalisées

Les expressions entre crochets [] vous permettent de définir vos propres ensembles de caractères. À l'intérieur des crochets, la plupart des métacaractères perdent leur signification spéciale—vous n'avez pas besoin de les échapper.

Conseil rapide : L'ordre des caractères dans une classe de caractères n'a pas d'importance. [abc] et [bca] sont identiques. La classe correspond si l'un des caractères est présent.

Exemples pratiques

Voici quelques utilisations réelles des classes de caractères :

Quantificateurs et répétition

Les quantificateurs spécifient combien de fois un motif doit se répéter. Ils sont placés après l'élément que vous voulez répéter—un caractère, une classe de caractères ou un groupe.

Quantificateur Signification Exemple
* 0 fois ou plus ab*c → ac, abc, abbc, abbbc
+ 1 fois ou plus ab+c → abc, abbc (pas ac)
? 0 ou 1 fois (optionnel) colou?r → color, colour
{n} Exactement n fois \d{4} → 2026, 1999
{n,} n fois ou plus \w{3,} → mots avec 3+ caractères
{n,m} Entre n et m fois \d{2,4} → 12, 123, 1234
*? Correspondance paresseuse/minimale (0 ou plus) <.*?> → première balise seulement
+? Correspondance paresseuse/minimale (1 ou plus) ".+?" → première chaîne entre guillemets
?? Correspondance paresseuse/minimale (0 ou 1) \d?? → correspond à 0 chiffre si possible

Correspondance gourmande vs paresseuse

C'est l'un des concepts les plus importants en regex. Par défaut, les quantificateurs sont gourmands—ils correspondent au maximum de texte possible tout en permettant au motif global de correspondre.

Considérez la chaîne HTML <b>bold</b> and <i>italic</i> :

Ajouter ? après un quantificateur le rend paresseux (aussi appelé non-gourmand ou minimal). Il correspond au minimum de texte possible tout en permettant au motif de réussir.

Conseil pro : Lors de l'extraction de contenu entre délimiteurs (guillemets, balises, crochets), utilisez presque toujours des quantificateurs paresseux. Le motif ".*?" extrait correctement les chaînes entre guillemets individuelles, tandis que ".*" correspondrait du premier guillemet au dernier guillemet dans tout le texte.

Motifs de quantificateurs courants

Voici des motifs que vous utiliserez constamment :

Ancres et limites

Les ancres ne correspondent pas à des caractères—elles correspondent à des positions dans la chaîne. Elles sont essentielles pour garantir que les motifs correspondent à des emplacements spécifiques plutôt que n'importe où dans le texte.

Ancre Position Exemple
^ Début de chaîne (ou ligne avec drapeau m) ^Hello → correspond à "Hello world" mais pas à "Say Hello"
$ Fin de chaîne (ou ligne avec drapeau m) end$ → correspond à "The end" mais pas à "end of story"
\b Limite de mot \bcat\b → correspond à "cat" mais pas à "category"
\B Pas une limite de mot \Bcat\B → correspond à "concatenate" mais pas à "cat"
\A Début de chaîne (jamais ligne) Comme ^ mais ignore le mode multiligne
\Z Fin de chaîne (jamais ligne) Comme $ mais ignore le mode multiligne

Limites de mot expliquées

La limite de mot \b est incroyablement utile mais souvent mal comprise. Elle correspond à la position entre un caractère de mot (\w) et un caractère non-mot (\W), ou au début/fin de la chaîne.

Considérez le motif \bcat\b appliqué à différentes chaînes :

Cela rend \b parfait pour trouver des mots entiers sans correspondre accidentellement à des parties de mots plus grands.

Ancres de début et de fin

Les ancres ^ et $ sont essentielles pour la validation. Lorsque vous voulez vous assurer qu'une chaîne entière correspond à un motif (pas seulement qu'elle le contient), enveloppez votre motif avec ces ancres.

Conseil rapide : Lors de la validation d'entrées utilisateur (e-mail, téléphone, nom d'utilisateur), utilisez toujours ^ et $ pour ancrer votre motif. Sans eux, le motif \d{3} accepterait "abc123def" alors que vous voulez probablement rejeter tout ce qui n'est pas exactement 3 chiffres.

Groupes et capture

Les parenthèses () servent deux objectifs en regex : elles regroupent des parties d'un motif ensemble, et elles capturent le texte correspondant pour une utilisation ultérieure. C'est là que regex devient vraiment puissant pour l'extraction et la transformation.

Syntaxe Objectif Exemple
(abc) Groupe de capture (\d{3})-(\d{4}) capture l'indicatif régional et le numéro
(?:abc) Groupe non-capturant (?:https?://)?example\.com groupe sans capturer
(a|b) Alternance (OU) (cat|dog) correspond soit à "cat" soit à "dog"
\1 Référence arrière au groupe 1 (\w+)\s+\1 correspond aux mots répétés comme "the the"
(?<name>abc) Groupe de capture nommé (?<year>\d{4})-(?<month>\d{2}) pour les dates

Groupes de capture

Lorsque vous enveloppez une partie d'un motif entre parenthèses, le moteur regex capture le texte correspondant. Vous pouvez ensuite référencer ces captures dans votre code ou même dans la regex elle-même en utilisant des références arrière.

Par exemple, le motif (\d{3})-(\d{3})-(\d{4}) appliqué à "555-123-4567" crée trois captures :

Dans la plupart des langages de programmation, vous pouvez accéder à ces captures via des objets de correspondance ou des chaînes de remplacement. Cela vous permet de reformater facilement les données—transformant "555-123-4567" en "(555) 123-4567" avec un remplacement comme ($1) $2-$3.

Groupes non-capturants

Parfois, vous avez besoin de regroupement pour les quantificateurs ou l'alternance mais vous n'avez pas besoin de capturer le texte. Utilisez (?:..