Introduction

Remarque : par abus de langage, le terme anglais “regular expression” est souvent traduit “expressions régulières”.

Les expressions rationnelles sont des séquences de caractères qui décrivent rigoureusement le motif / la structure d’une chaîne de caractères ; exemple : ^[0-9]+$ signifie “une chaîne constituée d’au moins un chiffre sans aucun autre caractère”.

Elles sont utilisées notamment pour :

  • la manipulation (non-interactive) de chaînes de caractères — dans des scripts pour automatiser des tâches par exemple ;
  • la validation des saisies dans les applications (web ou autres), côté client (pour la convivialité) et côté serveur (pour la sécurité) pour s’assurer que les données entrées respectent le format attendu (une adresse mél. par exemple) ;
  • la réécriture d’URL (cf fichiers .htaccess).

Caractères spéciaux

Les expressions rationnelles utilisent des caractères spéciaux pour :

  • indiquer le début (^) ou la fin ($) d’une chaîne (sinon d’autres caractères pourraient être présent avant ou après le motif) ;
  • indiquer que le caractère (ou la séquence de caractères) précédent(e) est présent(e) :
    • 0 ou 1 fois (?),
    • 0 ou plusieurs fois (*),
    • au moins une fois (+),
    • un nombre déterminé n de fois ({n}) ;
  • indiquer un (ou plusieurs) intervalle(s) de caractères ([debut-fin], [0-9A-Z] par exemple), n’importe quel caractère (.) ou certains caractères ([_~+] par exemple) ;
  • indiquer une alternative entre plusieurs séquences ((seq.1|seq.2)) ;
  • ou encore mémoriser une séquence ((seq.)) pour la réutiliser ensuite dans la chaîne de remplacement ($1, $2… en PHP, \1, \2… avec sed).

Lorsqu’un caractère spécial fait partie des caractères attendus, il faut le désactiver en l’échappant avec un anti-slash (\).

Remarque : Dans l’interpréteur de commandes (shell), notamment avec les commandes grep et sed, certains caractères spéciaux ((, ), | et + notamment) doivent être échappés pour être interprétés comme tels.

Exemple : numéro de téléphone français : ^(\+33|0)[1-9][0-9]{8}$.