[[https://www.php.net/manual/fr/function.preg-match.php|Site web officiel php.net]]
====== Les expressions régulières ======
Les expressions régulières (ou rationnelles) vont permettre de définir de manière concise la forme d'une chaine de caractères attendue (un patron ou modèle) et de la confronter à une chaine de caractères donnée.
On peut par exemple utiliser une expression régulière pour :
* Contrôler qu'un mot de passe saisi comprend au moins 8 caractères et dispose à la fois de chiffres, de majuscules, de minuscules et de caractères spéciaux.
* Extraire d'une chaine de caractères toutes les sous-chaines dont le format est conforme au modèle défini
* …
Les expressions régulières existent dans de nombreux langages informatiques ainsi que dans les langages de scripting.
Nous allons voir comment les définir en PHP.
===== Quelques exemples =====
==== Utilisation de la fonction preg_match() ====
Cette fonction vérifie si un texte correspond au modèle décrit dans une expression régulière, et retourne un booléen.
**Syntaxe utilisée ici :**
preg_match ( string $pattern , string $subject);
$subject : chaine de caractères à tester
$pattern : format souhaité pour la chaine de caractères
**Exemple d'utilisation :**
if (preg_match('#Castel#', 'J aime le lycée Le Castel!')) {
echo ('Le mot Castel est cité);
} else {
echo ("Le mot Castel n'est pas cité");
}
Ce code cherche la présence de la chaîne de caractères « Castel» dans la phrase 'J aime le lycée Le Castel!'
Autres possibilités : au lieu de #Castel#, on aurait pu écrire :
* '#CASTEL#i ' le mot pourra être en majuscule ou en minuscule
* '#Castel|php#' vrai si Castel ou php est présent dans la chaine de caractères
* '#php$#' vrai si php est à la fin de la chaine
* '#^php#' vrai si php est au début de la chaine
* '#gr[iao]s#' vrai pour gris, gras, gros
* '#gr[a-z]s#' vrai pour gr, puis n'importe quelle lettre, puis s
* '#gr[a-z1-9]s#' vrai pour gr, puis n'importe quelle lettre ou chiffre, puis s
* '#gr[^1-9]s#' vrai pour gr, puis tt caractère sauf un chiffre, puis s
* '#Cas?tel#' ? : la lettre qui précède peut être présente 0 ou une fois
* '#Cas+tel#' + : la lettre qui précède peut être présente une ou plusieurs fois
* '#Cas*tel#' * : la lettre qui précède peut être présente 0, une ou plusieurs fois
* '#Cas{3}tel#'
* {3} : la lettre qui précède doit être présente 3 fois
* {3,} : la lettre qui précède doit être présente au moins 3 fois
* {0,3} : la lettre qui précède doit être présente au plus 3 fois
* {3,5} : la lettre qui précède doit être présente au moins 3 fois, au plus 5 fois
* '#Ca(st)?el#' les lettres st pourront être présentes 0 ou 1 fois : les () permettent de
* faire le test des quantités sur plusieurs caractères
* '#Castel[1-9]?#' Castel suivi de 0 ou 1 chiffre
* '#Castel \?#' Castel suivi du point d'interrogation, \ est le caractère d'échappement
* '#^fin$#' Chaine qui commence par f, suivi d'un i et se termine par n
Les symboles **^** et **$** indiquent le début et la fin d'une chaîne, et permettent donc de la délimiter.
Quelques raccourcis permettent d'écrire ces formules plus rapidement :
* \d Indique un chiffre. Identique à [0-9]
* \D Indique ce qui n'est PAS un chiffre = [^0-9]
* \w Indique un caractère alphanumérique ou un tiret de soulignement = [a-zA-Z0-9_]
* \W Indique ce qui n'est PAS un mot = [^a-zA-Z0-9_]
* \t Indique une tabulation
* \n Indique une nouvelle ligne
* \r Indique un retour chariot
* \s Indique un espace blanc
* \S Indique ce qui n'est PAS un espace blanc (\t \n \r)