TUTORIELS 
Les expressions rationnelles avec PHP

Page 1 | 2

Approche progressive d'une méthode de manipulation et de vérification de chaîne extrêmement puissante et standardisée.
 (4 mars 2003)
 

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

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page