[[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)