2 min read

Regular Expression (REGEX)

Les expressions régulières (Regex) servent à faire correspondre des motifs dans des chaînes. Elles sont utiles pour les recherches, les remplacements en masse, l'extraction d'informations (ex. compter les occurrences d'un nom) et bien d'autres tâches de traitement de texte.

Variations

Plusieurs dialectes et implémentations existent :

Abbr. Nom complet Utilisé par
POSIX Portable Operating System Interface UNIX et outils CLI associés
PCRE Perl Compatible Regular Expressions Perl, PHP, R, et beaucoup d'autres
RE2 Regular Expressions 2 Logiciels et bibliothèques Google
Oniguruma Oniguruma Regular Expressions Ruby, PHP, et autres
ECMA ECMAScript® Language Specification JavaScript et de nombreuses apps web

Le standard POSIX se divise encore :

Abbr. Nom complet Utilisé par
ERE Extended Regular Expressions Certains systèmes POSIX
BRE Basic Regular Expressions Tous les systèmes POSIX

Ce tutoriel se concentre sur le standard ECMA (utilisé en webdev). Voir ECMA‑262 Edition 5.1


Les bases

  • Un pattern simple match la chaîne identique.

    • Exemple : abc matche "Let's sing abc!".
  • Classes de caractères :

    • [abc] : match a, b ou c
    • [a-c] équivaut à [abc]
    • [ac-] match a, c ou -
    • [^abc] match tout sauf a, b, c
  • Méta‑caractères et classes ciblées :

    • . : wildcard (tout sauf terminators de ligne \n, \r)
    • \d : chiffre (0–9)
    • \w : alphanumérique (lettres, chiffres, _)
    • \s : espace blanc (espaces, tabulations, retours à la ligne)
    • \t : tabulation
    • \n : saut de ligne (newline)
    • Espace littéral : appuyer sur la touche SPACE pour matcher un espace simple
  • Classes inverses :

    • \D : tout sauf chiffre
    • \W : tout sauf alphanumérique
    • \S : tout sauf espace blanc

Exemple pour matcher une ligne avec un retour : rechercher Hello\nWorld!

  • Disjonction : A|B match A ou B (ex. Green|Red).

Assertions

  • ^String : début du texte (ou début de ligne si flag m).
  • String$ : fin du texte (ou fin de ligne si flag m).
  • \b : frontière de mot (word boundary).
  • \B : inverse de \b.

Lookarounds :

  • x(?=y) : lookahead — x suivi de y.
  • x(?!y) : negative lookahead — x NON suivi de y.
  • (?<=y)x : lookbehind — x précédé par y.
  • (?<!y)x : negative lookbehind — x NON précédé par y.

Quantificateurs

Quantificateur Minimum Maximum
? 0 1
* 0 Infinity
+ 1 Infinity
{count} count count
{min,} min Infinity
{min,max} min max

Exemple : A\S* match un mot commençant par A.

Note : {min,max} doit être sans espaces entre nombres.


Flags (modificateurs)

  • (?i) : ignore case (insensible à la casse).
  • (?g) : global (trouve toutes les occurrences).
  • (?m) : multi-line (^ et $ s'appliquent par ligne).
  • (?s) : dotall (. matche aussi \n).

la syntaxe et le support des flags peuvent varier selon l'outil.


Groupes

  • Capturing group : (pattern) capture et référence plus tard ($1, $2).

    • Exemple Find/Replace dans un éditeur :
      • Find: (\bJohn\b)
      • Replace: Crazy$1!
  • Non-capturing / modifiers locaux :

    • (?i:pattern) : applique i localement (insensible à la casse) sans créer $1.
  • Named capturing group :

    • (?<name>pattern) puis remplacer par ${name}.

Selon l'implémentation, Replace All avec capturing groups et flag global (?g) peut donner des comportements différents (liste de matches vs dernier match).


Usage en JavaScript

JavaScript suit le standard ECMA.

Exemples :

const myRe = /\bA.+\b/g;
const myArray = myRe.exec("MyApple!");
console.log(`The value of lastIndex is ${myRe.lastIndex}`);
// "The value of lastIndex is 7"

Constructeur dynamique :

const re = new RegExp("ab+c");

Voir MDN : Regular expressions - JavaScript