9
PHP Construire une expression régulière avec des meta-caractères
Filed under: PHP - Expressions régulières | Tags: expression reguliere (2), meta-caracteres, PHP (3) | mai 9th, 2011
Construire une expression régulière
Une expression régulière est une chaine composées de caractères standards (mots ou tout simplement des caractères à rechercher) et caractères spéciaux ( méta-caractères ). Une expression régulière est entourée de délimiteurs. N’importe quelle caractère sauf caractères alphanumériques et antislash peut être être utilisé comme un délimiteur.
Parmi des méta-caractères en PHP en trouve :
Méta-caractère . ( point )
Remplace n’importe quel caractère, hormis le caractère de nouvelle ligne ( rn sur le système OS Windows et n sur le système Linux / Unix ) .

Méta-caractère antislash
Caractère de protection. Par exemple, si on recherche un point dans une chaine et sachant qu’il y a aussi un méta-caractères point qui représente n’importe quel caractère la seule façon de trouver notre point c’est d’utiliser l’antislash. Exemple :
echo preg_match( ‘/./’, ‘il n’y a pas de point ici’) ;
affiche 1 – trouvé . Remarquez l’utilisation de l’antisash devant l’apostrophe
echo preg_match( ‘/./’, ‘il n’y a pas de point ici’) ;
affiche 0 – non trouvé .
echo preg_match( ‘/./’, ‘il y a point ici.’) ;
affiche 1 – trouvé .
Méta-caractère ^ ( accent circonflexe)
Accent circonflexe indique le début de la chaîne. Ce qui veux dire que l’expression qui suit l’accent circonflexe doit se trouver au début de la chaine sujet.
Exemple :
$sujet = ‘www.kodeya.com’ ;
echo preg_match( ‘/^www.kodeya.com/’, $sujet ) ;
affiche 1 – chaine trouvée
$sujet = ‘ www.kodeya.com’ // avec 1 espace devant
echo preg_match( ‘/^www.kodeya.com/’, $sujet ) ;
affiche 0 – chaine non trouvée
Méta-caractère $ ( dollar )
La fin de la chaîne sujet. L’expression rationnelle qui précède le méta-caractère ‘$’ doit se trouver en fin de la chaine sujet.
Example :
$sujet = ‘www.kodeya.com’ ;
echo preg_match( ‘/www.kodeya.com$/’, $sujet ) ;
affiche 1 – chaine trouvée
$sujet = ‘www.kodeya.com ‘; // avec 1 espace à la fin
echo preg_match( ‘/www.kodeya.com $/’, $sujet ) ;
affiche 0 – chaine non trouvée
Expression régulières – Les classes de caractères
Méta-caractères : [ ( crochet ouvrant ) et ] ( crochet fermant )
Définissent une liste de caractères à rechercher. La partie du masque qui est entourée de crochets est appelée classe de caractères.
Exemple :
echo preg_match(‘/[abc]/’, ‘kodeya’);
affiche 1 – trouvé car la chaine sujet contiens bien « a »
Dans les classes de caractères, les seuls méta-caractères autorisés sont :
Meta-caractère antislash – caractère de protection
Meta-caractère - (tiret ) a une signification particulière , il permet de définir un intervalle de recherche. A utiliser avec des lettres ou/et des chiffres.
echo preg_match(‘/[a-z]/’, ‘abécéder’); // on recherche des caractères de a à z
affiche 1 – chaine trouvé
echo preg_match(‘/[a-z]/’, ’1245′);
affiche 0 – en effet, notre chaine sujet contiens uniquement des chiffres
Meta-caractère ^ ( accent circonflexe ) a une signification particulière s’il est utilisé à l’intérieur des crochets et uniquement si placé tout au début de la classe. ^ signifie la négation.
// on recherche des caractères différents des caractères qui se trouve entre ‘a’ est ‘z’
echo preg_match(‘/[^a-z]/’, ’123_ abz’);
affiche 1 – chaine trouvé. Notre chaine sujet contiens bien des caractères différents des lettres.
Attention :
echo preg_match(‘/[a-z^]/’, ’123′);
affiche 0 – non trouvé. Accent circonflexe qui n’est placé au début de la classe représente simplement… l’accent circonflexe.
echo preg_match(‘/[a-z^]/’, ’123^’);
affiche 1 – trouvé. Accent circonflexe est bien dans la chaine sujet.
Il en existe PHP un certain nombre de classe d’expressions régulières prédéfinies. Ces classes de caractères sont définies par UNIX. Voici un tableau récapitulant certaines de ces classes :
Description
[:alnum:]
caractères alphanumériques (équivalent à [A-Za-z0-9])
[:alpha:]
caractères alphabétiques ([A-Za-z])
[:blank:]
caractères blanc (espace, tabulation)
[:ctrl:]
caractères de contrôle (les premiers du code ASCII
[:digit:]
chiffre ([0-9])
[:graph:]
caractère d’imprimerie (qui fait une marque sur l’écran en quelque sorte)
[:print:]
caractère imprimable (qui passe à l’imprimante … tout sauf les caractères de contrôle)
[:punct:]
caractère de ponctuation
[:space:]
caractère d’espacement
[:upper:]
caractère majuscule
[
digit:]
caractère hexadécimal
Méta-caractère | ( barre verticale )
Opérateur « ou » – caractère d’alternative.
echo preg_match(‘/site|kodeya/’, ‘site www.kodeya.com’ ); // on recherche des mots ‘site’ ou ‘kodeya’
affiche 1 – chaine trouvé
echo preg_match(‘/site|kodeya/’, ‘mon ami google’ );
affiche 0 – ni site ni kodeya ne se trouvent pas dans la chaine sujet
Méta-caractères ‘(‘ , ‘ )’ – parenthèse ouvrante et parenthèse fermante indiquent respectivement le début et la fin de sous-masque qui doit être recherché dans la chaine sujet et capturé.
// on recherche le mot kodeya et on le met dans le tableau $capture
echo preg_match(‘/(kodeya)/’, ‘site www.kodeya.com’ , $capture);
affiche 1 – chaine trouvé
Les quantificateurs
Un quantificateur permet de définir le nombre de fois dont l’élément le précédant peut se reproduire.
Méta-caractère ? ( point d’interrogation )
Quantificateur de 0 ou 1 fois
echo preg_match(‘/z?/’, ‘www.kodeya.com’ );
affiche 1 – trouvé , Il y a bien 0 « z » dans la chaine sujet
echo preg_match(‘/k?/’, ‘www.kodeya.com’ );
affiche 1 – le ‘k’ est bien présent dans la chaine sujet
Méta-caractère * ( étoile )
Quantificateur de 0 ou plus.
echo preg_match(‘/z*/’, ‘www.kodeya.com’ );
affiche 1 – trouvé , Il y a bien 0 « z » dans la chaine sujet
echo preg_match(‘/k*/’, ‘www.kodeya.com’ );
affiche 1 – le caractér ‘k’ est bien présent dans la chaine sujet
Méta-caractère + ( plus )
Quantificateur de 1 ou plus.
echo preg_match(‘/z+/’, ‘www.kodeya.com’ );
affiche 0 – non trouvé , en effet, pas de « z » dans la chaine sujet
echo preg_match(‘/w+/’, ‘www.kodeya.com’ );
affiche 1 – le caractér ‘w’ est bien présent dans la chaine sujet
Méta-caractères ‘{‘ , ‘}’ – accolade ouvrante et accolade fermante
Les accolades permettent de définir un nombre précis de fois qu’un masque doit se trouver dans une chaine sujet.
Utilisation :
{x} : la chaîne doit être répétée x fois.
echo preg_match(‘/o{2}/’, ‘www.kodeya.com’ );
affiche 0 – non trouvé .
La condition o{2} est équivalente à ‘oo’. Même s’il y 2 lettres « o » dans la chaine sujet elles ne se suivent pas.
echo preg_match(‘/w{2}/’, ‘www.kodeya.com’ );
affiche 1 – trouvé . On a bien 2 lettres ‘w’ ensemble dans la chaine sujet.
{x, y} : la chaîne peut être répétée de x fois à y fois.
echo preg_match(‘/w{1,2}/’, ‘www.kodeya.com’ );
affiche 1 – trouvé même si il y a 3 ‘w’.
La condition w{2} est equivalente à la recherche de ‘ww’ dans la chaine sujet.