Aide-mémoire Regex : Motifs courants & Référence rapide
· 12 min de lecture
Table des matières
- Bases des Regex
- Classes de caractères
- Quantificateurs et répétition
- Ancres et limites
- Groupes et capture
- Lookahead et Lookbehind
- Drapeaux et modificateurs Regex
- Bibliothèque de motifs courants
- Regex dans différents langages
- Bonnes pratiques et performance
- Questions fréquemment posées
- Articles connexes
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 :
. ^ $ * + ? { } [ ] \ | ( )sont des métacaractères- Pour les faire correspondre littéralement, échappez-les avec une barre oblique inverse :
\.correspond à un point - À l'intérieur des classes de caractères
[], la plupart des métacaractères perdent leur signification spéciale
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.
[aeiou]correspond à n'importe quelle voyelle unique[0-9]correspond à n'importe quel chiffre (équivalent à\d)[a-zA-Z]correspond à n'importe quelle lettre, majuscule ou minuscule[^0-9]correspond à tout sauf les chiffres (le^nie la classe)[a-z-]correspond aux lettres minuscules ou à un trait d'union (trait d'union à la fin est littéral)
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 :
[A-Z][a-z]+correspond aux mots en majuscule comme "Hello" ou "World"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}correspond aux adresses IP (motif de base)[a-fA-F0-9]{6}correspond aux codes couleur hexadécimaux comme "FF5733"[^\s]+correspond à toute séquence de non-espaces blancs (un "mot" au sens large)
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> :
<.*>(gourmand) correspond à la chaîne entière du premier<au dernier><.*?>(paresseux) correspond juste à<b>, puis</b>, puis<i>, puis</i>séparément
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 :
\d+correspond à un ou plusieurs chiffres (nombres comme 42, 1000, 7)\w+correspond à un ou plusieurs caractères de mot (identifiants, noms de variables)\s*correspond aux espaces blancs optionnels (zéro ou plusieurs espaces/tabulations).+?correspond à n'importe quels caractères paresseusement (contenu entre marqueurs)[a-z]{2,}correspond aux mots avec au moins 2 lettres minuscules\d{3}-\d{3}-\d{4}correspond aux numéros de téléphone comme 555-123-4567
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 :
- "the cat sat" → correspond (cat est entouré d'espaces)
- "category" → pas de correspondance (cat est suivi du caractère de mot 'e')
- "concatenate" → pas de correspondance (cat est précédé et suivi de caractères de mot)
- "cat" → correspond (cat est au début et à la fin de la chaîne)
- "cat!" → correspond (cat est suivi de ponctuation, un caractère non-mot)
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.
^\d+$garantit que la chaîne entière est composée de chiffres (valide une entrée numérique)^[A-Z]garantit que la chaîne commence par une lettre majuscule[.!?]$garantit que la chaîne se termine par une ponctuation^https?://garantit qu'une URL commence par http:// ou https://
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 :
- Groupe 1 : "555"
- Groupe 2 : "123"
- Groupe 3 : "4567"
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 (?:..