Trois cas pratiques des regex
Les regex servent concrètement à trois types d'opérations :
- Validation : vérifier si un texte respecte un format (e-mail, numéro de mobile)
- Extraction : repérer dans un texte les contenus correspondant à un motif (toutes les URL, tous les montants)
- Remplacement : substituer les parties correspondant à un motif par autre chose (uniformiser un format de date, masquer un numéro de mobile)
Démonstration ci-dessous avec des cas concrets.
Cas de validation
Valider un numéro de mobile
regex : ^1[3-9]\d{9}$
Points clés : ancrer le début et la fin avec ^ et $ pour s'assurer que la chaîne entière est un numéro de mobile et non un texte plus long le contenant. Limiter le deuxième chiffre à 3-9 correspond aux règles actuelles de plage de numéros.
Valider un e-mail
regex : ^[\w.-]+@[\w.-]+.\w+$
Points clés : la version simplifiée suffit, une regex d'e-mail stricte est très complexe. En projet réel, combinez la version simplifiée avec l'envoi d'un e-mail de vérification pour double garantie.
Valider une carte d'identité
regex : ^\d{17}[\dXx]$
Points clés : 18 caractères, les 17 premiers sont des chiffres, le dernier est un chiffre ou X. Cette regex ne valide que le format, pas le code de contrôle.
Valider une URL
regex : ^https?://[\w.-]+
Points clés : commence par http ou https, suivi d'un domaine. Version simplifiée, une regex d'URL complète est extrêmement complexe.
Cas d'extraction
Extraire tous les numéros de mobile
regex : 1[3-9]\d{9}
Sans ^ ni $, pour trouver tous les numéros de mobile dans le texte. Utilisez la correspondance globale (indicateur g).
Extraire toutes les URL
regex : https?://[\w./?=&%-]+
Correspond aux URL commençant par http(s). Les caractères réels d'une URL sont plus complexes, ajustez le jeu de caractères selon vos besoins.
Extraire tous les montants
regex : [¥$]\d+(?:.\d+)?
Correspond aux montants commençant par ¥ ou $, la partie décimale est facultative. Par exemple ¥100, $99.9.
Extraire le contenu des balises HTML
regex : <a[^>]*>([^<]+)
Extrait le texte à l'intérieur des balises a. Les parenthèses capturent le contenu textuel. Notez que ce type de regex n'est pas assez robuste pour traiter du HTML ; pour du HTML complexe, un analyseur est plus fiable.
Cas de remplacement
Masquer un numéro de mobile
Remplacer les 4 chiffres du milieu par des astérisques : 1[3-9]\d{9} remplacé en conservant les 3 premiers et les 4 derniers.
En pratique, utilisez des groupes capturants : regex (1[3-9]\d)\d{4}(\d{4}), remplacer par \1****\2. \1 et \2 font référence aux groupes.
Uniformiser le format de date
Convertir 2026/07/12 en 2026-07-12 : regex (\d{4})/(\d{2})/(\d{2}), remplacer par \1-\2-\3.
Supprimer les espaces superflus
Convertir plusieurs espaces consécutifs en un seul : regex \s+, remplacer par un espace.
Supprimer les balises HTML
Retirer toutes les balises HTML pour ne garder que le texte : regex <[^>]+>, remplacer par une chaîne vide. Notez que les > situés dans les attributs de balises seront perdus ; pour des cas complexes, utilisez un analyseur.
Astuces de débogage
Valider progressivement avec un outil de test
Utilisez l'outil de test regex :
- Saisir la regex
- Saisir le texte de test (incluant des exemples qui doivent et ne doivent pas correspondre)
- Consulter les correspondances surlignées
- Ajuster progressivement la regex jusqu'à obtenir le bon résultat
D'abord faire correspondre, puis optimiser
Écrivez d'abord une regex qui correspond, puis envisagez l'optimisation (performance, précision). Ne visez pas la perfection dès le départ.
Visualiser la regex en ligne
Pour les regex complexes, utilisez un outil de visualisation pour décomposer la structure et clarifier la signification de chaque partie.
Attention aux cas limites
- Chaîne vide
- Chaîne ne correspondant que partiellement
- Chaîne contenant des caractères spéciaux
- Chaîne très longue
Motifs regex réutilisables
Caractères chinois
[\u4e00-\u9fa5]+
Code postal
^\d{6}$
Numéro QQ
^[1-9]\d{4,10}$
Couleur hexadécimale
^#[0-9a-fA-F]{6}$
Numéro de version
^\d+.\d+.\d+$
Pièges fréquents
Correspondance gourmande
.* correspond trop. Pour extraire le contenu d'une balise, utilisez [^<]+ plutôt que .* afin d'éviter les correspondances traversant plusieurs balises.
Caractères spéciaux non échappés
Les métacaractères comme le point, l'astérisque, le point d'interrogation doivent être échappés. Pour correspondre à une barre oblique inverse elle-même, écrivez \.
Correspondance multiligne
Par défaut, . ne correspond pas aux sauts de ligne. Pour traiter du texte multiligne, activez le mode ligne simple ou utilisez [\s\S] pour correspondre à n'importe quel caractère.
Problèmes de performance
Catastrophic backtracking (rétroaction catastrophique) : les quantificateurs imbriqués comme (a+)+ peuvent être extrêmement lents sur certaines entrées. Pour les regex complexes, surveillez les performances ; sur les textes très longs, tronquez avant de faire correspondre.
Résumé
La pratique des regex se divise en trois catégories : validation, extraction et remplacement. La validation utilise les ancres ^ et $, l'extraction la correspondance globale, le remplacement les références aux groupes capturants. Testez d'abord vos regex avec un outil, puis optimisez. Mémorisez quelques motifs courants (numéro de mobile, e-mail, date, URL) pour couvrir les besoins quotidiens. L'outil de test regex de DocsAll s'exécute dans le navigateur : testez au fil de l'écriture, votre texte n'est pas téléversé.