Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Créer un motif de recherche


Pour rappel, les motifs sont réalisés au moyen de symboles spécifiques : [ Symboles ]

Sans doute aurez-vous l'impression de déjà vu, déjà lu, mais c'est pas bien grave. Un petit rappel de théorie sous forme de condensé n'est pas forcément inutile.

Définition d'un motif

Pour utiliser une image que chacun comprendra, on peut assimiler le motif à un produit spécifique que l'on recherche dans les rayons d'une grande surface.
Si on a besoin d'une boîte de petits pois, il n'est pas nécessaire d'aller dans le rayon des poudres à lessiver.

La construction d'une expression régulière s'apparente à une expression mathématique car on y trouve des opérateurs, des valeurs et des variables.

Avec un peu d'habitude, vous trouverez plus facilement le motif correct.
Dans chaque recherche, vous avez un but, un objectif. Cet objectif, vous devez le transposer de manière à ce que le moteur d'expressions régulières puisse le trouver grâce aux balises (motif) que vous aurez établies.

Méthode : comment rédiger un motif ?

Exemple :
Vous rechercher par exemple, www dans une url, vous savez qu'il est précédé de http:// et suivi par un . (point)

Inutile donc de chercher ce qui se trouve devant http://, ni ce qui suit le point. Plus vous serez précis, plus le moteur à des chances de trouver rapidement ce que vous souhaitez.

/!\ Attention !
Trop de précision nuira peut-être à la recherche ou pas assez de précision sortira trop d'éléments.
Dans l'établissement d'un motif d'expression régulière le seul conseil que je puisse vous donner c'est de faire des tests et d'affiner le plus possible au fur et à mesure la précision de votre motif.

Caractères spéciaux ou métacaractères

Nous allons poser le problème des caractères spéciaux, c'est à dire ceux qui ont une signification particulière dans la construction des motifs de recherche.
Ces caractères spéciaux, vous pouvez les retrouver sur la page des symboles
[ Symboles ]

De par leur statut de caractères spéciaux, il ne peuvent être utilisés n'importe comment et il faut les faire précéder du caractère d'échappement \ (antislash)
Ces caractères spéciaux ou métacaractères sont les suivants :

^ . [ ] $ ( ) * + ? | { } \
Il y a lieu de tenir compte aussi du point d'exclamation (!) qui intervient au niveau des assertions.

Il convient également de dire que ces caractères spéciaux perdent leur statut s'il sont utilisé entre les crochets [ ] donc, à l'intérieur d'un classe.

Tous sauf le ] et le tiret -

Donc, je répète, pour enlever le statut du caractère spécial on place un antislash avant.
Il faut noter également qu'en dehors des crochets, le tiret - garde son caractère littéral.
Pour pouvoir utiliser malgré tout le ] et le -tiret dans une classe (entre crochet []), il va falloir jouer les p'tits malins et utiliser la ruse.

Je vous laisse le soin de visiter la page sur les Métacaractères afin d'obtenir le maximum d'infos.
Cf-> Les Métacaractères

Les parenthèses

Un atout important des regex, c'est d'être capable de réaliser la capture de sous-chaîne qui satisfont le masque afin de les utiliser par la suite, dans la chaîne de remplacement.

Pour réaliser cette opération, nous allons utiliser les parenthèses afin d'encadrer la partie du motif que l'on souhaite capturer. ( on appelle cela une "instance" )

Il suffira par la suite de faire une référence à cette instance pour en récupérer les valeurs.
On utilisera à cet effet la syntaxe suivante : \\x ou $x ou la lettre x représente le numéro de la parenthèse capturante. Il est possible de réaliser la capture de 9 instances. L'instance \\0 ou $0 fait référence à la chaîne en entier, \\1 ou $1 à la première parenthèse capturante, et ainsi de suite jusqu'à 9.

Vous trouverez un exemple de cette technique dans les pages :
Cf-> POSIX en pratique et Cf-> PCRE en pratique.

Conclusion

Les expressions régulières demandent beaucoup plus de pratique que de connaissances. Il est évident que l'un ne va pas sans l'autre et que les éléments structurels doivent être connus.
ADAM Benjamin 2008 | Admin