Blog de benji1000

Les expressions régulières en PHP

Le 23 mars 2012 dans Développement web

Voilà un petit article récapitulatif des fonctions de base pour utiliser les expressions régulières (ou expressions rationnelles , ou regexp ) en PHP. Pour rappel, cette technique très puissante permet de parser une chaîne de caractères , pour en récupérer ou modifier certaines parties (ex : reconnaître une adresse mail, une adresse postale, un numéro de téléphone...).

Reconnaître : preg_match_all()

La fonction preg_match_all() vous permettra de reconnaître un motif/modèle dans une chaîne de caractères. Par exemple, on peut reconnaître une adresse mail grâce au bout de code suivant :

preg_match_all("/[a-z0-9._-]+@[a-z0-9._-]{2,}\\.[a-z]{2,4}/",$entree,$r);
$mail = $r[0][0];

Premier paramètre de la fonction : le format à reconnaître. Là, il faut connaître les regexp. Ici, par exemple, on va reconnaître : une chaine de caractère (pouvant contenir chiffres, lettres, en majuscules et minuscules, ainsi que certains caractères spéciaux), suivi du symbole "@", suivi d'une autre chaine de caractères (le nom de domaine), suivi d'un point, suivi de l'extension de 2 à 4 caractères (par exemple, .fr, .net ou .info).

Le deuxième et troisième paramètre sont, respectivement, la chaine de caractères en entrée, suivi de la valeur sortie de la fonction (qui, vous le remarquerez, est un tableau).

Modifier : preg_replace()

La fonction preg_replace() vous permettra de modifier une chaîne de caractères selon un format que vous spécifiez. À titre d'exemple, le code suivant passe une date anglaise (mm/jj/aaaa) au format français (jj/mm/aaaa) :

$date = preg_replace("/([0-9]{2})+\/([0-9]{2})+\/([0-9]{4})/","$2:$1:$3",$r);

Le premier paramètre (le pattern ), reconnaît successivement trois groupes de chiffres séparés par des slash ; les deux premiers groupes sont formés de 2 chiffres, le dernier est formé de 4 chiffres. Grâce aux parenthèses, chacun de ces groupes est stockée dans une variable temporaire (dans l'ordre d'apparition, $s, $2,$3).

Le deuxième paramètre remet tout ça dans l'ordre : on utilise pour ça les variables temporaires créées dans le pattern du premier paramètre. Le jour passe avant le mois, puis vient l'année.

Pour finir, comme pour preg_match_all(), le troisième paramètre est le tableau de sortie.

Plus d'infos sur le sujet

Les regexp est un domaine de l’informatique difficile à maîtriser. Mais une fois que l'on sait s'en servir, cela devient très puissant. Cet article est donc relativement court par rapport à l'ampleur du sujet, c'est pourquoi je vous conseille la lecture des tuto suivants sur les regexp, vraiment bien faits et bien expliqués : Site du Zéro ( of course... ) et Comment Ça Marche ( of course... ).