Avant tout, vous devez bien comprendre que les expressions régulières ne font pas partie du langage PHP en soi mais que PHP a intégré un support pour les expressions régulières dans son langage car ces dernières vont s’avérer très pratiques, notamment pour vérifier la conformité formelle des données envoyées par des utilisateurs via des formulaires.
Présentation des expressions régulières
Une expression régulière (aussi abrégé en « regex ») est une séquence de caractères qu’on va définir et qui va nous servir de schéma de recherche.
Les expressions régulières, en les utilisant de concert avec certains fonctions PHP, vont nous permettre de vérifier la présence de certains caractères dans une chaine de caractères en évaluant la chaine de caractères selon l’expression régulière passée.
Nous allons très souvent utiliser les expressions régulières pour filtrer et vérifier la validité des données envoyées par les utilisateurs via des formulaires par exemple.
Notez que les expressions régulières n’appartiennent pas au PHP mais constituent un langage en soi.
Cependant, le PHP supporte et reconnait les expressions régulières et nous fournit des fonctions qui vont nous permettre d’exploiter toute la puissance de celles-ci.
Regex POSIX contre regex PCRE
Il existe deux types d’expressions régulières possédant des syntaxes et des possibilités légèrement différentes : les expressions régulières POSIX et PCRE.
L’acronyme POSIX signifie « Portable Operating System Interface for Unix ».
L’acronyme PCRE signifie lui Perl Compatible Regular Expression.
Ces deux types de regex vont posséder des syntaxes différentes, mais cela va nous importer peu puisque depuis la version 5.3 du PHP l’extension correspondant aux regex POSIX a été rendue obsolète.
Nous allons donc utiliser les PCRE, qui sont un type de regex dont la syntaxe est tirée du langage Perl.
Création de premières expressions régulières
Les expressions régulières vont être formées d’un assemblage de caractères qui vont former ensemble un schéma de recherche ainsi que de délimiteurs. On appelle également l’ensemble schéma de recherche + délimiteurs un masque
Les caractères vont pouvoir être des caractères simples ou des caractères spéciaux qui vont avoir une signification particulière.
Un délimiteur peut être n’importe quel caractère, tant qu’il n’est pas alphanumérique, un caractère blanc, l’antislash (« \ ») ou le caractère nul. De plus, si le délimiteur choisi est réutilisé dans notre expression régulière, alors il faudra échapper ou « protéger » le caractère dans la regex en le précédant d’un antislash. Pour le moment, je vous conseille d’utiliser le caractère slash (« / ») comme délimiteur.
En PHP, nous enfermerons généralement nos regex dans des variables pour pouvoir les manipuler facilement.
Commençons par créer une première expression régulière ensemble afin de voir en pratique à quoi ça ressemble.
Ici, notre regex contient le schéma de recherche pierre
et nous avons utilisé, comme convenu, des slashs pour entourer ce schéma de recherche. Ce schéma de recherche va nous permettre de rechercher la présence de la séquence « pierre » dans une chaine de caractères.
En soi, ici, notre regex ne nous sert pas à grand-chose. Cependant, nous allons ensuite pouvoir utiliser des fonctions PHP pour par exemple valider la présence de notre schéma de recherche dans une chaîne de caractères.
Le grand intérêt des expressions régulières est qu’elles vont nous permettre d’effectuer des recherches très puissantes.
En effet, dans le langage des expressions régulières, beaucoup de caractères possèdent un sens spécial, ce qui va nous permettre d’effectuer des recherches très précises.
Par exemple, les regex PCRE possèdent ce qu’on appelle des « options ». Ces options vont nous permettre d’ajouter des critères supplémentaires à nos recherches et vont être représentées par des lettres.
La lettre i
, par exemple, va nous permettre de rendre notre regex insensible à la casse, ce qui signifie que notre regex ne fera pas de distinction entre majuscules et minuscules (on peut donc en déduire que les regex sont sensibles à la casse par défaut).
Les options doivent être placées en fin de regex, après le délimiteur, comme ceci :
Dans les chapitres qui vont suivre, nous allons créer des regex de plus en plus complexes et découvrir les fonctions PHP nous permettant d’exploiter toute la puissance des expressions régulières.