PHP, MYSQL, Javascript, HTML…Just do it!
icône RSS icône Emai icône Accueil
  • 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’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
    [:xdigit:]
    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.