-
PHP Construire une expression régulière avec des meta-caractères
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’apostropheecho 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éeMé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éeExpression 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 protectionMeta-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 chiffresMeta-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
[:xdigit:]
caractère hexadécimalMé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 sujetMé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 foisecho preg_match(’/z?/’, ‘www.kodeya.com’ );
affiche 1 – trouvé , Il y a bien 0 “z” dans la chaine sujetecho preg_match(’/k?/’, ‘www.kodeya.com’ );
affiche 1 – le ‘k’ est bien présent dans la chaine sujetMé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 sujetecho preg_match(’/k*/’, ‘www.kodeya.com’ );
affiche 1 – le caractér ‘k’ est bien présent dans la chaine sujetMé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 sujetecho preg_match(’/w+/’, ‘www.kodeya.com’ );
affiche 1 – le caractér ‘w’ est bien présent dans la chaine sujetMé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.



Les phrases qui tuent