Expressions régulières en PHP ereg_replace, preg_replace et PCRE (Perl Compatible Regular Expressions)
Par PlaceOweb le mardi, janvier 8 2008, 00:51 - PHP - Lien permanent
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.