PHP, MYSQL, Javascript, HTML…Just do it!

PHP Construire une expression régulière avec des meta-caractères

Filed under: PHP - Expressions régulières | Tags: , meta-caracteres, | mai 9th, 2011
Post

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
[ :x 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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*


Anti-Spam Image
Pour prouver que vous n'êtes pas un bot, recopiez le code ci-dessous  

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>