Aller au contenu | Aller au menu | Aller à la recherche


Expressions régulières en PHP ereg_replace, preg_replace et PCRE (Perl Compatible Regular Expressions)

Les expressions régulières, ha quelle bonne invention pour faciliter les modifications de chaînes de caractères. Encore faut il savoir s'en servir...

header("Content-type: text/plain");
 
setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1');
 
$in = "Les chiffres 1,2,3, les accents éêèëç, les spéciaux +-*/'<>&\"#()[] fin.";
 
$pattern = array("[^a-z]{1,}",
                 "([^[:alnum:]]{1,})",
                 "/[^\w]/",
				 "/[^[:alnum:]]/",				 
				 "/[^[:alnum:]\+\-\/\*'.,<>()]/"
                 );
 
$replace = "_";
 
$i=0;
$test[] = eregi_replace($pattern[$i++],$replace,$in);
$test[] = eregi_replace($pattern[$i++],$replace,$in);
$test[] = preg_replace($pattern[$i++],$replace,$in);
$test[] = preg_replace($pattern[$i++],$replace,$in);
$test[] = preg_replace($pattern[$i++],$replace,$in);
 
$pad = 50;
echo str_pad("Test:Entrée:",$pad).$in."\n";
foreach( $test as $key => $result ) {
        echo str_pad("Resultat [$key] ($pattern[$key]):",$pad).$result."\n";
}
 
//Retournera : 
//Test:Entrée:                                      Les chiffres 1,2,3, les accents éêèëç, les spéciaux +-*/'<>&"#()[] fin.
//Resultat [0] ([^a-z]{1,}):                        Les_chiffres_les_accents_les_sp_ciaux_fin_
//Resultat [1] (([^[:alnum:]]{1,})):                Les_chiffres_1_2_3_les_accents_les_sp_ciaux_fin_
//Resultat [2] (/[^\w]/):                           Les_chiffres_1_2_3__les_accents_éêèëç__les_spéciaux________________fin_
//Resultat [3] (/[^[:alnum:]]/):                    Les_chiffres_1_2_3__les_accents_éêèëç__les_spéciaux________________fin_
//Resultat [4] (/[^[:alnum:]\+\-\/\*'.,<>()]/):     Les_chiffres_1,2,3,_les_accents_éêèëç,_les_spéciaux_+-*/'<>___()___fin.

Si comme moi vous perdez les accents : lisez l'excellent tutoriel en Français sur Les expressions régulières PCRE (Perl Compatible Regular Expressions) Remarque importante: on a vu plus haut que les classes POSIX [:alpha:], [:alnum:], [:word:] ou PCRE \w comprennent les accentués, mais seulement si le bon jeu de caractères est installé sur le serveur, sinon, un setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1') devrait résoudre le problème (ou bien 'fr_FR','fra_fra'...Vérifiez sur votre serveur les locales installées).

Ressources : Expressions rationnelles (compatible Perl)

  • Options de recherche
  • Séquences d'échappement
    • \w tout caractère de "mot"
    • \W tout caractère qui n'est pas un caractère de "mot"
    • mot : Un caractère de "mot" sera une lettre, un chiffre ou le caractère souligné, c'est-à-dire un caractère qui pourra être une partie d'un mot Perl.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet