Motifs d'expressions régulières que tout développeur devrait maîtriser
Les expressions régulières (regex) sont l'un des outils les plus puissants de la boîte à outils d'un développeur. Elles vous permettent de rechercher, valider et transformer du texte avec des motifs concis, des opérations qui pourraient nécessiter des dizaines de lignes de code procédural. Bien que la syntaxe des expressions régulières puisse sembler obscure au premier abord, la maîtrise d'un ensemble de motifs de base couvre la grande majorité des cas d'utilisation pratiques. Ce guide présente les motifs d'expressions régulières que vous utiliserez encore et encore, avec une explication détaillée du fonctionnement de chaque motif.
Rappel des bases des expressions régulières
Avant de plonger dans les motifs spécifiques, voici un rappel rapide des métacaractères fondamentaux qui composent tous les motifs d'expressions régulières :
| Métacaractère | Signification | Exemple |
|---|---|---|
| . | Tout caractère unique | a.c correspond à abc, a1c, a c |
| * | Zéro ou plusieurs fois le caractère précédent | ab*c correspond à ac, abc, abbc |
| + | Une ou plusieurs fois le caractère précédent | ab+c correspond à abc, abbc |
| ? | Zéro ou une fois le caractère précédent | colou?r correspond à color, colour |
| ^ | Début de chaîne | ^Hello correspond à Hello en début de chaîne |
| $ | Fin de chaîne | world$ correspond à world en fin de chaîne |
| [] | Classe de caractères | [aeiou] correspond à toute voyelle |
| () | Groupe capturant | (ab)+ correspond à ab, abab |
| | | Alternance (ou) | cat|dog correspond à cat ou dog |
| \d | Chiffre [0-9] | \d{3} correspond à 123 |
| \w | Caractère de mot [a-zA-Z0-9_] | \w+ correspond à hello_123 |
| \s | Caractère d'espacement | a\sb correspond à a b |
1. Validation d'e-mail
Motif d'e-mail de base
Ce motif valide la structure de base d'une adresse e-mail : un ou plusieurs caractères autorisés avant le @, suivi d'un domaine contenant au moins un point, et un domaine de premier niveau de deux lettres ou plus. Il capture la plupart des formats invalides tout en laissant passer les adresses légitimes.
Correspond à : user@example.com, john.doe+tag@company.co.uk
Ne correspond pas à : user@, @example.com, user@.com
2. Validation d'URL
Motif d'URL HTTP/HTTPS
Ce motif correspond aux URL HTTP et HTTPS avec un préfixe www facultatif, incluant le domaine et un chemin optionnel. Le s? rend le « s » de https facultatif, (www\.)? rend le préfixe www facultatif. Le segment de chemin (\/[^\s]*)? permet tout caractère sauf les espaces après le domaine.
Correspond à : https://example.com, http://www.example.com/path/to/page
Ne correspond pas à : ftp://example.com, example.com (sans protocole)
3. Validation de numéro de téléphone
Numéro de téléphone international
Ce motif suit le format E.164 pour les numéros de téléphone internationaux. Il autorise un préfixe + facultatif, exige que le premier chiffre soit 1-9 (pas de zéro en tête), et autorise jusqu'à 15 chiffres au total. C'est le format le plus fiable pour stocker et valider des numéros de téléphone internationalement.
Correspond à : +14155552671, 442071838750
Ne correspond pas à : +01xxxxxxxxx, 123
4. Force du mot de passe
Motif de mot de passe fort
Ce motif impose une politique de mot de passe forte : au moins 8 caractères, incluant au moins une lettre minuscule, une lettre majuscule, un chiffre et un caractère spécial. La syntaxe (?=.*[...]) utilise des lookaheads positifs pour vérifier la présence de chaque type de caractère sans consommer de caractères.
Correspond à : MyP@ss1word, Str0ng!Pass
Ne correspond pas à : password, Password1, P@ss
5. Validation d'adresse IP
Adresse IPv4
Ce motif valide les adresses IPv4 avec des vérifications de plage correctes. Chaque octet doit être entre 0 et 255. Le motif utilise une alternance de correspondances : 250-255 (25[0-5]), 200-249 (2[0-4]\d) ou 0-199 ([01]?\d\d?). Cela est répété trois fois après trois points, puis une dernière fois pour l'octet final.
Correspond à : 192.168.1.1, 10.0.0.1, 255.255.255.0
Ne correspond pas à : 256.1.1.1, 192.168.1, 192.168.1.1.1
6. Validation de format de date
YYYY-MM-DD (ISO 8601)
Ce motif valide les dates au format ISO 8601 (YYYY-MM-DD). Il vérifie une année à quatre chiffres, un mois entre 01-12 et un jour entre 01-31. Notez que ce motif valide le format mais pas la validité logique de la date (par exemple, il autorise 2026-02-31). Pour une validation complète, analysez la date et vérifiez par programme.
Correspond à : 2026-05-20, 2025-01-01, 2024-12-31
Ne correspond pas à : 2026-5-20, 2026-13-01, 26-05-20
7. Code couleur hexadécimal
Couleur hexadécimale CSS
Ce motif correspond aux codes couleur hexadécimaux CSS, y compris la forme abrégée à 3 chiffres (#fff) et la forme complète à 6 chiffres (#ffffff). Le quantificateur {1,2} autorise 1 ou 2 répétitions du groupe de 3 chiffres hexadécimaux, prenant en charge les deux formats.
Correspond à : #fff, #FF5733, #1e293b
Ne correspond pas à : fff, #ff, #1234567
8. Slug / Chaîne sécurisée pour URL
Motif de slug URL
Ce motif valide les slugs URL : des chaînes alphanumériques en minuscules séparées par des tirets. Il garantit qu'il n'y a pas de tiret en début ou en fin, ni de tirets consécutifs. Ce format est SEO-friendly, sûr pour les URL, les noms de fichiers et les identifiants.
Correspond à : my-blog-post, regex-patterns-guide, tool123
Ne correspond pas à : My-Post, -slug, slug-, my--post
9. Numéro de carte de crédit
Motif de carte de crédit générique
Ce motif valide les numéros de carte de crédit principaux : Visa (commence par 4, 13 ou 16 chiffres), Mastercard (commence par 51-55, 16 chiffres), American Express (commence par 34 ou 37, 15 chiffres) et Discover (commence par 6011 ou 65, 16 chiffres). Utilisez ceci en combinaison avec l'algorithme de Luhn pour une validation complète.
10. Correspondance de balises HTML
Extraction de balises HTML
Ce motif correspond aux balises HTML ouvrantes et fermantes avec contenu. Le premier groupe capturant ([a-z][a-z0-9]*) capture le nom de la balise, et la référence arrière \1 garantit que la balise fermante correspond à la balise ouvrante. (.*?) utilise une correspondance paresseuse pour capturer le contenu entre les balises, pour la correspondance la plus courte.
Conseils pour écrire de meilleures expressions régulières
- Commencez simplement : écrivez d'abord la version la plus basique du motif, puis ajoutez progressivement de la complexité. Testez à chaque étape.
- Utilisez des classes de caractères : [a-z] est plus clair que (a|b|c|...|z). Les classes nommées comme \d, \w et \s améliorent la lisibilité.
- Privilégiez les quantificateurs paresseux : lorsque vous avez besoin de la correspondance la plus courte, utilisez *? et +? au lieu de * et + pour éviter la sur-correspondance gourmande.
- Utilisez des ancres : pour la validation, utilisez toujours ^ et $ pour garantir que la chaîne entière correspond, pas seulement une sous-chaîne.
- Évitez la rétroaction catastrophique : les quantificateurs imbriqués comme (a+)+ peuvent entraîner une complexité temporelle exponentielle pour certaines entrées. Utilisez des groupes atomiques ou des quantificateurs possessifs lorsqu'ils sont disponibles.
- Commentez les motifs complexes : utilisez l'indicateur x (mode verbeux) pour ajouter des espaces et des commentaires aux motifs complexes.
Vous voulez tester ces motifs d'expressions régulières de manière interactive ? Essayez notre outil de test d'expressions régulières gratuit, avec mise en évidence des correspondances en temps réel, visualisation des groupes capturants et explication des motifs.
Tester les expressions régulièresQuestions fréquentes
Qu'est-ce qu'un motif d'expression régulière ?
Un motif d'expression régulière est une séquence de caractères qui définit un motif de recherche. Il est utilisé pour la correspondance de chaînes, la validation, les opérations de recherche-remplacement et l'analyse de texte. Les motifs d'expressions régulières utilisent des métacaractères spéciaux comme ., *, +, ?, [], () et {} pour définir des règles de correspondance flexibles.
Dois-je utiliser des expressions régulières pour valider des adresses e-mail ?
Utilisez des expressions régulières pour la validation basique du format d'e-mail (vérification du symbole @, structure du domaine), mais n'essayez pas de valider complètement une adresse e-mail uniquement avec des expressions régulières. La spécification des e-mails (RFC 5322) est extrêmement complexe et aucune expression régulière ne peut valider parfaitement toutes les adresses valides. En production, combinez une validation regex basique avec une vérification d'e-mail réelle (envoi d'un lien de confirmation).
Quelle est la différence entre les quantificateurs gourmands et paresseux ?
Les quantificateurs gourmands (*, +) correspondent à autant de texte que possible, tandis que les quantificateurs paresseux (*?, +?) correspondent à aussi peu de texte que possible. Par exemple, appliqué à « aabb », le motif gourmand a.*b correspond à « aabb » (la chaîne entière), tandis que le motif paresseux a.*?b correspond uniquement à « aab » (la correspondance la plus courte).
Comment tester un motif d'expression régulière ?
Utilisez un outil de test d'expressions régulières en ligne (comme le testeur d'expressions régulières de ToolHub) pour tester vos motifs de manière interactive. Ces outils mettent en évidence les correspondances en temps réel, affichent les groupes capturants et expliquent la fonction de chaque partie du motif.
Les expressions régulières sont-elles identiques d'un langage de programmation à l'autre ?
La plupart de la syntaxe des expressions régulières est partagée entre les langages, mais les fonctionnalités avancées varient. JavaScript ne prend pas en charge les assertions lookbehind dans les anciens moteurs, Python utilise une syntaxe de groupes nommés différente de JavaScript, et PCRE (PHP) prend en charge plus de fonctionnalités que la plupart des autres moteurs. Testez toujours vos motifs dans le langage cible.