Regex

De wiki.nexiat.fr
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 : ")

Voir aussi

  • Patterns — motifs courants prêts à l'emploi (e-mail, IP…)
  • Grep — expressions régulières en ligne de commande (BRE, ERE, PCRE)
  • Sed — substitution par expressions régulières