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 :
abcmatche "Let's sing abc!".
- Exemple :
-
Classes de caractères :
[abc]: matcha,bouc[a-c]équivaut à[abc][ac-]matcha,cou-[^abc]match tout saufa,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|BmatchAouB(ex.Green|Red).
Assertions
^String: début du texte (ou début de ligne si flagm).String$: fin du texte (ou fin de ligne si flagm).\b: frontière de mot (word boundary).\B: inverse de\b.
Lookarounds :
x(?=y): lookahead —xsuivi dey.x(?!y): negative lookahead —xNON suivi dey.(?<=y)x: lookbehind —xprécédé pary.(?<!y)x: negative lookbehind —xNON précédé pary.
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!
- Find:
- Exemple Find/Replace dans un éditeur :
-
Non-capturing / modifiers locaux :
(?i:pattern): appliqueilocalement (insensible à la casse) sans créer$1.
-
Named capturing group :
(?<name>pattern)puis remplacer par${name}.
Selon l'implémentation,
Replace Allavec 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
Member discussion