Les expressions rationnelles (regular expressions,
d'où la traduction erronée "expressions régulières")
définissent des motifs (patterns) qui, en les
appliquant sur une chaîne de caractères, permettent
de tester la présence (ou non) de certains caractères,
et donc de valider cette chaîne, la modifier ou encore d'y
faire une recherche. Elles sont extrêmement puissantes
et permettent, une fois que le développeur en maîtrise
les capacités, de grandement réduire la longueur du
code: permettant ainsi de gagner du temps, mais aussi d'être
assuré de ne rien avoir oublié tant elles sont strictes.
Cet aspect des
expressions rationnelles tient au fait que le motif décrit
non-seulement le(s) caractère(s) ou la sous-chaîne
voulue, mais spécifie aussi dans quel ordre et combien
de fois les occurrences de ce(s) caractère(s) peu(ven)t apparaître.
Ainsi, si tous les utilisateurs ont un mot de passe répondant
au motif "_G347" (un tiret
de soulignement, puis une lettre majuscule, puis trois chiffres),
l'expression rationnelle correspondant à ce motif sera "^_{1}[A-Z]{1}[0-9]{3}$".
C'est ensuite aux fonctions "regex" (abréviation
usuelle pour regular expressions) de PHP de traiter ce motif
de la manière dont vous le souhaitez...
PHP propose
une poignée de fonctions en rapport avec les expressions
rationnelles, mais il faut savoir qu'elles se divisent en deux:
celles
qui sont compatibles Perl (PCRE, Perl Compatible Regular
Expression), et celles
compatibles POSIX. Le langage Perl a été l'un
des premier à faire usage des regex,
initialement développées pour l'outils Unix grep.
Perl a largement contribué à leur amélioration.
Nous ne verrons ici que celles de types POSIX, PHP devant faire
appel à une bibliothèque externe pour utiliser les
regex PCRE. Ajoutons que les deux syntaxes sont différentes
en certains points (les fonctions PCRE commencent et se terminent
obligatoirement par un caractère de délimitation),
et que les fonctions PCRE sont plus rapides et flexibles que les
POSIX.
Syntaxe
La syntaxe Perl ayant déjà été abordée
dans l'article "Les
expressions régulières en Perl", nous ne verrons ici que
la syntaxe POSIX.
La
syntaxe de base
|
Caractère
|
Description
|
Exemple
|
^
|
Indique
le début de la chaîne
|
"^Le":
toute chaîne commençant par "Le": "Le
chiens", "Les avions"...
|
$
|
Indique
la fin de la chaîne
|
"soir$":
toute chaîne se terminant par "soir": "bonsoir",
"a ce soir"...
|
*
|
Le
caractère apparaît zéro, une ou plusieurs
fois
|
"^jim*y$":
"jiy", "jimmy", "jimmmmmmmmy"...
|
+
|
Le
caractère apparaît au moins une fois
|
"^jim+y$":
"jimy", "jimmy", "jimmmmmmmmy"...
|
?
|
La
caractère apparaît zéro ou une fois
|
"^lapins?$":
"lapin" ou "lapins"
|
{x}
|
Le
caractère apparaît strictement x fois
|
"^jim{2}y$":
"jimmy".
|
{x,}
|
Le
caractère apparaît au moins x fois
|
"^jim{2,}y$":
"jimmy", "jimmmmmy"...
|
{x,y}
|
Le
caractère apparaît entre x et y
fois
|
"^sup{1,3}e{1,9}r$":
"super", "supppeeeeeeeer"...
|
.
|
N'importe
quel caractère
|
"^P.P$":
"PHP", "PGP", "PCP"...
|
|
|
Opérateur
OU
|
"^b(a|o|u)tte$":
"batte", botte" ou "butte"
|
[xy]
|
"x
ou y" (identique à x|y)
|
"^[rmg]ite$":
"rite", "mite" ou "gite"
|
[x-y]
|
Tous
les caractères entres x et y
|
"^[a-z]{5}$":
"teejj", "dkjsh", "jfjdn", "kgodj"...
"^[a-zA-Z]{3}": une chaîne commençant par trois
lettres.
",[A-Z0-9]$": une chaîne se terminant par une virgule
suivie d'une majuscule ou d'un chiffre.
|
Ce n'est là qu'une partie de la syntaxe complète,
mais qui nous permet déjà de créer des motifs
très avancés. Pour utiliser les caractères
spéciaux ci-dessus de manière littérale, il
faut utiliser le caractère \,
sauf à l'intérieur des crochets où les caractères
spéciaux n'ont pas d'effet.
Page 1 | 2
|