Expressions régulières et motifs | Développement Web

Expressions régulières et motifs

Suite à l’article déjà publié concernant les expressions régulières en javascript (où l’on retrouve les mêmes éléments pour pratiquement tous les langages), nous allons ici évoquer en plus quelques éléments intéressants sur la création de motifs pour les expressions régulières.

Il est bon de noter que les expressions régulières sont aujourd’hui largement normalisées. On les retrouve dans pratiquement tous les langages (PERL, C, PHP, Javascript, …) et leur syntaxe est similaire.

Petits rappels

__ Si on veut rechercher un motif dès le début de la chaîne, il faut commencer l’écriture du motif par le symbole ^.

__ Si l’on veut vérifier le motif sur (ou jusqu’à) la fin de la chaîne à traiter, il faut terminer l’écriture du masque avec le $.

   L'écriture d'un motif tel que ^web$ signifie que la chaine doit contenir
   exactement le mot web et c'est tout.
   Cela correspond en fait à tester si la chaîne est égale (==) à 'web'.

   Si le motif = ^web, cela signifie que l'on teste si la chaîne commence
   bien par le terme web.

   Si le motif = web$, cela signifie que l'on vérifie si la chaîne se
   termine par le terme web.

__ Dans un motif, le point (.) a un rôle particulier, il correspond à n’importe quel caractère. Si la recherche s’effectue justement sur le point, il faudra alors l’échapper dans le motif de cette façon : \. .

   Le motif ^....$ équivaut donc à tester si la chaîne contient bien 4 caractères.
   Bien évidemment, pour faire un tel test nous privilégierons l'écriture suivante :

       if(strlen($chaine) == 4) ...

__ Il existe des regroupements permettant de rendre l’expression régulière plus compacte.

   [:alpha:] : ne contient que des lettres (minuscules ou majuscules)
   [:alnum:] : contient des lettres (minuscules ou majuscules) ou des chiffres
   [:digit:] : ne contient que des chiffres
   [:blank:] : pour des caractères d'espacement (\n, ' ',\t)
   [:punct:] : pour les signes de ponctuation

__ Voici un bref rappel sur l’écriture de motif :

  '(web)?' : contient au maximum une fois la chaîne web.

  '(web)+' : contient au minimum une fois la chaîne web.

  '(web)*' : contient zéro ou plusieurs fois la chaîne web.

  '(web){3}' : contient 3 fois la chaîne web à la suite.

  '(web){3,6}?' : contient 3 et 6 fois la chaîne web à la suite.

__ Le caractère pipe | signifie OU dans le motif. Ainsi pour tester si la chaîne contient com, fr, net ou eu, nous noterons:

     $motif = '^(com|fr|net|eu)$';

Tester le format d’une adresse email

En reprenant les différents éléments listés ci-dessus, voici le motif à écrire pour vérifier le format d’une adresse email :

   <?php

     $email = 'pseudo@domain.fr';
     $regMail = '/^[[:alnum:]\.-_]+@[[:alnum:]\.-_]+\.[[:alpha:]]{2,5}$/';

     if(preg_match($regMail,$email)){
       echo 'Le format de l\'adresse saisie est correct';
     }

     /* Affiche "Le format de l'adresse saisie est correct" */

   ?>