Aller plus loin : Les Expressions Régulières - Regex⚓︎
Les expressions régulières sont des syntaxes permettant de faire des recherches dans un texte, qui suivent un certain motif / modèle / pattern.
Caractères Littéraux⚓︎
Un caractère au sens usuel est appelé un caractère littéral
Méta-caractères⚓︎
Un méta-caractère est un caractère représentant tout caractère d'un certain genre, suivant un certain /pattern
Les méta-caractères se répartissent classiquement en 3 groupes distincts
Les (méta-)caractères uniques⚓︎
Un
Méta-caractère | Signification |
---|---|
\d |
Tout chiffre de 0 à 9 |
\w |
Tout caractère classique d'un mot :A-Za-z0-9 |
\s |
Tout caractère représentant un espace : un espace, ou une tabulation |
. |
Tout caractère unique, quel qu'il soit |
Les Quantificateurs⚓︎
Les /
permettent de représenter un certain nombre de fois un (méta-) caractère unique.
Méta-caractère | Signification |
---|---|
* |
0 ou plusieurs fois |
+ |
1 ou plusieurs fois |
? |
0 ou 1 (à placer après) |
{min, max} |
un nombre n de fois avec \(min \leq n \leq max\) |
{n} |
un nombre n de fois, exactement |
Warning
- Le quantificateur
.*
est glouton/ greedy
par défaut : il sélectionne le plus grand match possible (au sens de l'inclusion) qui satisfait la regex.
- Exemple : Dans le texte
1blablacara4est4foismeilleur
la regex1.*4
va matcher1blablacara4est4
càd le dernier 4 (et non pas1blablacara4
, càd non pas le premier 4)
- Exemple : Dans le texte
- On peut modifier ce comportement en ajoutant un caractère
?
, appelé un modificateur :- Exemple : Dans le texte
1blablacara4est4foismeilleur
la regex1.*?4
va maintenant matcher (seulement)1blablacara4
càd le premier 4 (et non plus1blablacara4est4
càd le dernier 4, comme précédemment)
- Exemple : Dans le texte
Les méta-caractères de Position⚓︎
Méta-caractère | Signification |
---|---|
^ |
qui commence par .. |
$ |
qui termine par .. |
\b |
à frontière de mot (word boundary) |
Classes de Caractères⚓︎
Les classes de caractères permettent de représenter le OU LOGIQUE (un caractère OU bien un autre, etc..), ou bien des plages de caractères suivant une certaine logique.
Les classes de caractères sont représentées entre des [ ]
Par exemple :
Exemple de classe de caractère |
Signification |
---|---|
[abc] |
un a , ou un b ou un c |
[-.] |
un - , ou un . |
caractères littéraux dans les classes
- un méta-caractère échappé avec l'anti-slash
\
représente le même caractère au sens littéral :\.
représente le caractère point littéral
- un point
.
à l'intérieur d'une classe de caractères ne signifie plus tout caractère, mais le caractère littéral du point.
Pte
A l'intérieur des classes, néanmoins, les caractères suivants peuvent avoir une signification particulère (méta-caractères dans les classes), selon leur position précise dans la classe :
méta-caractère dans une classe |
Signification |
---|---|
- |
une plage de caractères |
> | [a-z] tout caractère de a à z |
> | [a-c0-5] tout caractère de a à c ou, tout chiffre de 0 à 5 |
^ |
en première position d'une classe, le ^ représenteune négation logique :< tout caractère autre que ... Au milieu d'une classe, le ^ représente le caractère littéral ^ |
> | [^0-5] tout caractère autre qu'un chiffre de 0 à 5 |
> | [0-5^] tout chiffre entre 0 et 5 ou un caractère ^ littéral |
Alternance = OU LOGIQUE sur des groupes de caractères⚓︎
L'alternance permet de choisir un groupe de lettres ou bien ou autre groupe de lettres
Alternance | Signification |
---|---|
(net | com) |
le groupe net , ou bien le groupe com |
Groupes et Références Arrière⚓︎
Les parenthèses permettent de capturer des (sous-)groupes d'un résultat d'une regex. Prenons des exemples :
Groupes⚓︎
group[0]⚓︎
On considère ici :
- un texte contenant le numéro :
314-666-5678
- la regex :
\d{3}-\d{3}-\d{4}
qui sélectionne bien ce numéro
Le match global, s'appelle group[0]
Ici : group[0]
correspond donc à 314-666-5678
group[1]⚓︎
On considère ici :
- un texte contenant le (même) numéro :
314-666-5678
- la regex
\d{3}-(\d{3})-\d{4}
avec des parenthèses cette fois-ci
group[0]
représente encore le match global : 314-666-5678
. De plus :
group[1]
représente ici 666
: En effet, l'utilisation de parenthèses dans cette regex, signifie que cette (sous-)partie du match global doit être capturée séparément, ou additionnellement, dans un autre groupe, appelé group[1]
group[2]⚓︎
On considère ici :
- un texte contenant le (même) numéro :
314-666-5678
- la regex
\d{3}-(\d{3})-(\d{4})
avec des parenthèses cette fois-ci
group[0]
représente encore le match global : 314-666-5678
. De plus :
group[1]
représente encore 666
.
group[2]
représente ici 5678
: En effet, l'utilisation de parenthèses dans cette regex, signifie que cette (sous-)partie du match global doit encore une fois être capturée séparément, ou additionnellement, dans (encore) un autre groupe, appelé group[2]
etc..
Références Arrière⚓︎
On peut faire référence à ces groupes, ou bien lors d'un replace, ou dans la regex elle-même, en utilisant des notations particulières :
$1
fait référence au groupe 1 lors d'un replace, et qu'on veut faire référence au groupe capturé n°1\1
fait référence au groupe 1 depuis l'intérieur de la regex elle-même$2
fait référence au groupe 2 lors d'un replace, et qu'on veut faire référence au groupe capturé n°2\2
fait référence au groupe 2 depuis l'intérieur de la regex elle-même- etc..