Les expressions régulières

Maintenant que nous avons une certaine assurance avec PHP, il serait grand temps de commencer à réfléchir aux expressions régulières.

En effet, les expressions régulières vous permettront d'analyser différentes chaînes de caractères (principalement saisies par un client dans un formulaire) et ainsi vérifier que la chaîne correspond bien à ce que l'on demande.

De plus, les expressions ne servent pas qu'à la vérification de la "conformité" d'une chaîne de caractère, puisqu'elles vont permettront également d'améliorer grandement l'utilisation de votre site.

Les expressions régulières ont été empruntées au système POSIX. De nombreux scripts Perl les utilisent également.
Il s'agit d'un système extrêmement ingénieux permettant de retrouver un mot, voir même une phrase complète (d'une certaine forme) dans un texte, suivant un modèle que l'on aura défini, le pattern.

Par exemple, à l'aide des expressions régulières, vous pourrez facilement vérifier l'adresse email qu'un visiteur dans un champs d'un formulaire de votre site (ceci en testant l'allure de la chaîne de caractère saisie par ce client : on testera entre autre si il y a bien un @ dans cette chaîne de caractères, mais juste un seul, que la chaîne qui suit ce @ est bien un nom de domaine, et que la chaîne qui précède le @ est bien un identifiant valide, c'est-à-dire sans caractères interdits, etc...).

Ou encore, avec les expressions régulières, vous pourrez intégrer dans votre script de news (ou pourquoi pas même votre forum) un système analysant la chaîne de caractère de votre news (de vos messages du forum) en y recherchant des URL, et si elles sont présentes dans votre chaîne, et bien de faire un lien vers cette URL, et ce, tout automatiquement.

Pour la suite du cours, je vais vous parlez seulement des modèles (pattern).

Ce sont ces modèles, qui sont en fait des sortes de masques que l'on applique sur une chaîne de caractères ou un texte pour trouver une suite de caractères bien précise.

Par la suite, il existe diverses fonctions utilisant ces modèles afin d'isoler ces suites de caractères, et d'agir sur eux, et je vous renvoies donc à la documentation pour les étudier (je vous rappelle que ce n'est pas de la fainéantise de ma part de ne pas vous parler de ces fonction, mais il y en a tellement, que le cours serait gigantesque ; et de plus, si vous arriver à créer vos propres modèles, vous n'aurez aucun mal à utiliser ces fonctions avec ces modèles).


Les symboles ^ et $


Dans une expression régulière, le symbole ^ représente le début d'un modèle, et le symbole $ représente la fin d'un modèle.

Voyons de suite quelques exemples :
  • ^La globule : identifie une chaîne de caractères qui commence par "La globule"
  • *
  • enfin$ : identifie une chaîne de caractères qui se finit par "enfin"
  • ^mot$ : identifie une chaîne de caractères qui commence par "mot" et qui fini par "mot", il s'agit donc de la chaîne de caractères "mot" elle-même
  • test: identifie une chaîne de caractères qui contient le mot "test"


Jusque là, tout va bien.

En effet, vous pouvez remarquer que si vous n'employer ni ^ ni $ (dernier exemple), cela implique que votre modèle peut se reproduire n'importe où à l'intérieur de votre chaîne de caractères, puisque le modèle n'est ni collé au début de la chaîne (on utilise pas de ^) ni à la fin de la chaîne (on utilise pas de $).


Les symboles *, + et ?


Dans les expressions régulières, les symboles *, + et ? servent à indiquer le nombre de fois qu'un caractère ou une suite de caractères puisse apparaître.
En effet, ces symboles agissent sur les éléments (un caractère ou bien une suite de caractères) qui les précédent.
* indiquera que le caractère (ou la suite de caractères) qui le précède ne pourra apparaître que soit, aucune fois, soit plusieurs fois.
+ indiquera que le caractère (ou la suite de caractères) qui le précède ne pourra apparaître soit, une fois, soit plusieurs fois.
? indiquera que le caractère (ou la suite de caractères) qui le précède ne pourra apparaître soit, aucune fois, soit une et une seule fois.

Voyons alors quelques exemples :
  • ab* : identifie une chaîne de caractère contenant un a suivi d'un ou d'aucun b (par exemple, les chaînes "a", "ab", "abbb" respectent ce modèle)
  • ab+ : identifie une chaîne de caractère contenant un a suivi d'au moins un b (par exemple, les chaînes "ab", "abb", "abbb" respectent ce modèle)
  • ab? : identifie une chaîne de caractère contenant un a suivi d'un ou d'aucun b (par exemple, les chaînes "a", "ab" respectent ce modèle, alors que "abb" ne le respecte pas)
  • a?b+$ : identifie une chaîne de caractères composée d'aucun ou d'un seul a, suivi d'un ou de plusieurs b, le tout étant situé à la fin de la chaîne


Les accolades {}


Par extensions aux symboles précédents, vous pouvez également des limites qui s'utilisent à l'intérieur d'accolades et qui indiquent le nombre d'occurrence de la chaîne recherchée.
De même, comme pour les symboles *, + et ?; elles affectent l'élément qui les précède.

Voyons tout de suite des exemples :
  • ab{2} : identifie une chaîne de caractère composée d'un a suivit d'exactement deux b (en clair, seule la chaîne "abb" passe à travers ce modèle)
  • ab{2,} : identifie une chaîne de caractère composée d'un a suivi d'au moins deux b (par exmple, "abb" ou "abbb" respectent ce modèle)
  • ab{3,5} : identifie une chaîne de caractère composée d'un a suivi de trois à cinq b ("abbb", "abbbb" et "abbbbb" sont les seules chaînes qui respectent ce modèle)




Sachez que vous devez toujours indiquer le premier chiffre dans vos accolades, alors que le second n'est pas obligatoire.

Vous pouvez également remarquer que l'on peut retrouver la fonction des symboles *, + et ? avec des limites appropriées.
En effet, le symbole :
  • * correspond en fait à la limite {0,}
  • + correspond en fait à la limite {1,}
  • ? correspond en fait à la limite {0,1}


Les parenthèses ()


Afin de quantifier une chaîne de caractères, vous devez utiliser des parenthèses.

Les exemples étant beaucoup plus parlant que du bla-bla, voici quelques exemples :
  • a(bc)* : identifie une chaîne de caractères commençant par un a suivi d'aucune ou de plusieurs séquence de caractères "bc"
  • a(bc){1,5}* : identifie une chaîne de caractères commencant par un a suivi d'une à cinq fois la séquence de caractères "bc"


Le symbole |


Le symbole | fonctionne comme l'opérateur booléen OU.

Voyons quelques exemples :
  • toto|titi : identifie une chaîne de caractères contenant le mot "toto" ou le mot "titi"
  • (b|cd)ef : identifie une chaîne de caractères qui contient la séquence de caractères "bef" ou bien la séquence de caractères "cdef"
  • (a|b)*c : indentifie une chaîne de caractères qui contient une alternance de a et de b, chaîne se terminant par un c ("bababbbaac" respecte ce modèle, tout comme "c", "bc" par exemple)


Le symbole .


Le symbole . (le point) représente n'importe quel caractère unique.

Exemple :
  • ^.{3,}$ : identifie une chaîne de caractères comportant exactement trois caractères


Les crochets []


Les expressions entre crochets ( []) indiquent les caractères qui sont permis à un endroit précis d'un modèle.

Les exemples :
  • [ab] : identifie une chaîne de caractères contenant un "a" ou un "b" (ce qui revient au même d'écrire le modèle a|b)
  • [a-d] : identifie une chaîne de caractères qui contient les lettres minuscules comprises entre le "a" et le "d" (ce qui équivalent de a|b|c|d ou de [abcd])
  • ^[a-zA-Z] : identifie une chaîne de caractères qui commence par une lettre minuscules ou bien par une lettre majuscule
  • [0-9]% : identifie une chaîne de caractères qui contient un pourcentage à un seul chiffre
  • ,[a-zA-Z0-9]$ : identifie une chaîne de caractères qui finit par une virgule suivi d'un caractère (lettre ou chiffre)


Note 1 :

Vous pouvez également lister les caractères que vous ne voulez pas en utilisant le symbole ^ comme premier symbole dans vos crochets.

Exemple : %[^a-zA-Z]% : identifie une chaîne de caractères avec un caractère qui n'est pas une lettre (soit en fait un chiffre ou autres chose, mais pas une lettre) entre deux signes pourcentage

Note 2 :

Pour utiliser les caractères ^, ., [, $, (, ), |, *, +, {, dans vos expressions régulières, vous devrez les protéger avec un \ juste avant ceux-ci (car en effet, ces caractères ont une signification spéciale, et donc pour pouvoir les utiliser, il faut les protéger).

Sous - note :

N'oubliez pas que les expressions entre crochets sont une exception à cette règle.
En effet à l'intérieur des crochets, tous les caractères spéciaux, y compris l'antislash , perdent leurs puissances spéciales (en clair, dans les crochets, vous ne devez pas protéger les caractères spéciaux avec un \).


Enfin !!!
A première vue, les expressions régulières ne sont pas simple d'utilisation, mais croyez moi, elles sont extrêmement puissantes.

Et maintenant que vous êtes familier avec les modèles, pourquoi ne pas aller faire un tour du côté de la documentation, afin de voir avec quelles fonctions s'utilisent ces précieuses expressions régulières ?

Ce tutorial est fini, pour votre plus grande joie, ainsi que la mienne :)
LoadingChargement en cours