Vue d’ensemble (What)
Cet article est une référence technique complète pour l’utilisation pratique et portable des expressions régulières. Il couvre la syntaxe de base, les correspondances multiligne, les techniques de remplacement, la compatibilité avec les outils, et les meilleures pratiques de conception.
Objectif (Why)
Les expressions régulières sont fondamentales pour la validation, l’analyse, la transformation et l’extraction de données textuelles. Elles sont utilisées dans tous les langages de programmation et sur toutes les plateformes, et leur bonne maîtrise permet une automatisation et un traitement de données efficaces.
Partie 1 : Syntaxe de base
Motif | Signification | Exemple | Correspondances |
---|---|---|---|
. |
Tout caractère sauf retour à la ligne | a.c |
abc , a-c |
* |
Répétition 0 fois ou plus | go*gle |
ggle , google |
+ |
Répétition 1 fois ou plus | go+gle |
gogle , google |
? |
Optionnel (0 ou 1 fois) | colou?r |
color , colour |
{n} |
Exactement n répétitions | a{3} |
aaa |
{n,m} |
De n à m répétitions | a{2,4} |
aa , aaa , aaaa |
^ |
Début de ligne | ^abc |
Ligne commençant par abc |
$ |
Fin de ligne | abc$ |
Ligne se terminant par abc |
[] |
Un caractère parmi | [abc] |
a , b , c |
[^] |
Aucun des caractères listés | [^0-9] |
Tout sauf chiffre |
\d |
Chiffre | \d+ |
123 , 007 |
\D |
Non-chiffre | \D+ |
abc , XYZ |
\w |
Caractère mot (alphanumérique + _ ) |
\w+ |
abc_123 |
\W |
Caractère non mot | \W+ |
#@! , espaces |
\s |
Espace, tab, saut de ligne | \s+ |
Espace, tabulation, retour ligne |
\S |
Caractère non blanc | \S+ |
abc , 123 |
` | ` | OU logique | `foo |
() |
Regroupement | (abc)+ |
abcabc |
\b |
Limite de mot | \bregex\b |
Mot exact regex |
Partie 2 : Motifs pratiques (Multilingue)
Usage | Expression | Remarques |
---|---|---|
Chiffres uniquement | ^\d+$ |
Nombre entier |
Nombre décimal | ^\d+\.\d+$ |
Avec un point |
Alphanumérique | ^[a-zA-Z0-9]+$ |
Identifiant |
E-mail (simple) | ^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$ |
Format commun |
URL (http/https) | https?://[\w.-]+\.[a-zA-Z]{2,}(/[\w./?=&%-]*)? |
Inclut chemins et requêtes |
Date ISO | \d{4}-\d{2}-\d{2} |
Format AAAA-MM-JJ |
Téléphone international | \+\d{1,3}[\s-]?\d{1,14} |
Ex : +33 6... |
Nom d’utilisateur | ^[a-zA-Z0-9._-]{3,20}$ |
Pour réseaux sociaux |
Mot de passe fort | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ |
Contient majuscule, minuscule, chiffre |
Partie 3 : Correspondance multiligne
🔹 Pourquoi utiliser [\s\S]*? ?
Le point .
ne correspond généralement pas aux retours à la ligne. Pour capturer plusieurs lignes, on utilise :
[\s\S]*?
Cela permet de capturer tous les caractères, y compris les sauts de ligne, de manière non-gourmande.
💡 Note :
[\s\S\n]*?
peut aussi être utilisé comme solution de repli.
🔹 Exemples communs
Cas d’usage | Motif | Remarques |
---|---|---|
Bloc de texte libre | [\s\S]*? |
Capture sécurisée |
Bloc <div> HTML |
<div[\s\S]*?</div> |
Jusqu’à la fermeture du bloc |
Commentaires HTML | <!--[\s\S]*?--> |
Bloc de commentaires |
Bloc code Markdown | "[\s\S]*? " |
Bloc entouré de backticks |
Partie 4 : Techniques de remplacement
🔹 Syntaxe selon les outils
${1}
,${2}
(VSCode, .NET, Python)$1
,$2
(JavaScript, sed)
🔹 Exemples utiles
Tâche | Motif | Remplacement |
---|---|---|
Inverser deux mots | (\w+)\s+(\w+) |
${2} ${1} |
Ajouter un span | >([^<]+)< |
><span>${1}</span>< |
CSV → JSON | ^([^,]+),([^,]+),([^,]+)$ |
{ "a": "${1}", "b": "${2}", "c": "${3}" } |
Format date | (\d{4})/(\d{2})/(\d{2}) |
${1}-${2}-${3} |
CamelCase → snake_case | ([a-z])([A-Z]) |
${1}_${2} |
Partie 5 : Compatibilité par outil
Outil | Multiligne | Non-gourmand | Remplacement | Notes |
---|---|---|---|---|
VSCode | ✅ | ✅ | ${1} |
[\s\S]*? ou [\s\S\n]*? recommandé |
JavaScript | ✅ (flag s ) |
✅ | $1 , $<name> |
Groupes nommés supportés |
Python (re ) |
✅ (re.DOTALL ) |
✅ | \g<1> ou \1 |
Préférer les chaînes raw r"" |
sed | ❌ (ligne unique) | ❌ | \1 , \2 |
Basique uniquement |
grep/egrep | ❌ | ❌ | ❌ | Recherche uniquement, pas de remplacement |
Partie 6 : Bonnes pratiques & antipatterns
✅ Recommandé
- Utiliser
[\s\S]*?
pour support multiligne - Éviter
.*
au profit de non-gourmand - Utiliser
(?:...)
pour les groupes non capturants - Nommer les groupes si possible (
(?<nom>\d{4})
) - Documenter les regex complexes (
re.VERBOSE
)
❌ À éviter
Motif | Problème |
---|---|
.* |
Risque de surcorrespondance (greedy) |
[^a-z] |
Non compatible avec les caractères accentués |
Analyse imbriquée | HTML/XML imbriqués → regex inadapté |
.+ |
Capture aussi des lignes vides |
Conclusion
Ce guide est une référence robuste pour appliquer efficacement les expressions régulières sur plusieurs plateformes et langages.
Adoptez [\s\S]*?
pour les correspondances multiligne, respectez la syntaxe propre à chaque outil, et concevez des patterns lisibles et maintenables.
Une expression régulière bien pensée est un outil puissant, fiable et réutilisable.