Regex
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Domaine | Expressions régulières (motifs de texte) |
| Base | Standard POSIX (BRE/ERE), variantes PCRE (Perl) |
| Voir aussi | Patterns, Grep, Sed |
Une expression régulière (regex) décrit un motif permettant de rechercher, valider ou
remplacer du texte. La syntaxe de base s'appuie sur la norme POSIX ; de nombreux outils
(grep -E, Perl, Python, JavaScript…) en proposent des variantes plus riches (PCRE).
Pour l'application concrète en ligne de commande, voir Grep (BRE / ERE / PCRE avec
-E et -P) et Sed. Pour une collection de motifs prêts à l'emploi,
voir Patterns.
Métacaractères de base
^ début de ligne
$ fin de ligne
. n'importe quel caractère (sauf saut de ligne)
| alternative : 1|8 correspond à 1 ou 8
[...] liste de caractères : a[bB]c → abc, aBc
[A-Za-z0-9] une lettre ou un chiffre
(...) groupe de caractères : (123){3} → 123123123
Quantificateurs
* zéro, un ou plusieurs : ab*c → ac, abc, abbbc
+ un ou plusieurs : ab+c → abc, abbbc
? zéro ou un : ab?c → ac, abc
{n} exactement n fois : E{4} → EEEE
{n,m} entre n et m fois : E{2,4}
{,m} au plus m fois : E{,5}
{n,} au moins n fois : E{8,}
Exemples : [A-Za-z0-9]{5} (5 caractères alphanumériques),
(cha){2,5} (« cha » répété 2 à 5 fois).
Exemple en Python
Le module standard re ; les chaînes de motif se notent en raw string
(r"...") pour ne pas avoir à doubler les antislashs.
import re
# Recherche / test
re.search(r"abc", "abcdef")
if re.match(expression, chaine) is not None:
...
# Validation d'un numéro de téléphone français
expression = r"^[0-9]([ .-]?[0-9]{2}){4}$"
while re.search(expression, chaine) is None:
chaine = input("Saisissez un numéro de téléphone (valide) : ")
# Remplacement, avec référence au groupe capturé \1
re.sub(r"(ab)", r" \1 ", "abcdef")
# Groupes nommés
print(re.sub(r"id=(?P<id>[0-9]+)", r"id[\g<id>]", texte))
# Expression compilée (réutilisable)
exp_mdp = re.compile(r"^[A-Za-z0-9]{6,}$")
while exp_mdp.search(mot_de_passe) is None:
mot_de_passe = input("Tapez votre mot de passe : ")