









Une expression régulieres permet de rechercher de façon précise une chaîne de caractère dans une autre.
Par exemple on pourrait rechercher dans un texte toutes les lettres 'a' qui ont un 'r' juste avant.
La méthode d'écriture peut sembler rébarbative et incompréhensible mais si on s'y attarde on se rend compte que c'est de la simple logique.
| Code | Descriptif |
|---|---|
| \ | Caractère d'échappements |
| ^ | début de la chaîne |
| $ | Fin de la chaîne |
| . | N'importe quel caractère sauf nouvelle ligne |
| [ et ] | Début et fin de définition de classe |
| | | Alternative (ex: x|y vaut x ou y) |
| ( et ) | début et fin de sous masque |
| ? | indique que le caractère précédent doit être présent 0 ou 1 fois |
| * | indique que le caractère précédent doit être présent 0 fois ou plus |
| + | indique que le caractère précédent doit être présent 1 fois au moins |
| { et } | Début et fin de quantificateur, le contenu est un entier, veut dire que le caractère qui précède l'accolade ouvrante est présent exactement n fois (ex : p{5} pour 5 p d'affilé) |
| \n | nouvelle ligne |
| \r | retour chariot |
| \t | tabulation |
| \xhh | caractère en hexadécimal, de code hh |
| \d | tout caractère décimal |
| \D | tout caractère qui n'est pas un caractère décimal |
| \s | tout caractère blanc (espace) |
| \S | tout caractère qui n'est pas un caractère blanc |
| \w | tout caractère de “mot”, identique à [A-Za-z0-9_] |
| \W | tout caractère qui n'est pas un caractère de “mot”, identique à [^A-Za-z0-9_]”. |
| \b | limite de mot (ex: er\b correspond a 'er' dans 'marcher' mais pas dans 'merci' |
| \B | pas limite de mot (ex: er\B correspond a 'er' dans 'marcher' et dans 'merci' |
Entre les crochets se trouve les classes de caractère. Dans ces classes, on peu utiliser seulement quelques caractères :
| Code | Descriptif |
|---|---|
| \ | Caractère d'échappements |
| ^ | Placé au début de la classe veut dire : Tous sauf. (ex: [^0-5] donne tous sauf les chiffre de 0 à 5) |
| - | Intervalle (ex: [a-z] donne de a à z |
preg_replace est la fonction la plus utilisé avec les expressions régulieres, elle permet de remplacer un pattern (votre expression) dans une chaîne. exemple :
$txt="<qui> demande a sa maman des bonbon ?"; $pattern = "</?[^>]*>"; // remplace par vide echo (ereg_replace($pattern,"TOTO",$txt)); //affichera : //TOTO demande a sa maman des bonbons ?
</?[^>]*>
<style[^>]*>(.|\n)*</style>(\r\n)?
<div [^>]*id=toto[^>]*>(.|\n)*</div>(\r\n)?
^[0-1][0-9]|[0-2][0-3]):[0-5][0-9]$
^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}$
function RemoveUnwantedCharFromBalise($balise, $char) { //Enlève un caractère a une balise //Exemple <toto:plop> , on enlève le ':' ça donne <totoplop> $pattern = '(<[^> ]*)'.$char.'([^>]*>)'; return ereg_replace($pattern,'\\1\\2',$balise); } function RemoveUnwantedCharFromAttrib($src,$char) { //Enlève un caractère dans un attribut //Ex : <a toto:plop="ok"> on enleve le ":" on à <a totoplop="ok"> $pattern = '(<[^> ]* [^>]*)'.$char.'([^>]*=)'; return ereg_replace($pattern,'\\1\\2',$src); } function AddHttpToSrc($src, $root) { //Rajoute http aux images qui ne l'ont pas dans le src //Ex : src="blog/img.jpg" deviendrais src="http://moi.com/blog/img.jpg" $pattern = 'src="([^:"]*)"'; return ereg_replace($pattern,'src="'.$root.'\\1"',$src); } function AddTargetToLink($src) { //Rajoute un target="_blank" aux liens qui ne l'ont pas $pattern = '(<a [^>]*)>'; if (ereg ($pattern, $src, $regs)) { if (strpos(strtolower($regs[1]), 'target')===false) { //si ya pas target return ereg_replace($pattern,'\\1 target="_blank">',$src); } } return $src; } function GetOnlyString($t) { //Enleve tous les autres caractères que des chiffres et des lettres (espace supprimé aussi) $pattern = '/[a-zA-Z0-9]/'; $ret=''; for($i=0;$i<strlen($t);$i++) { if (preg_match($pattern,$t{$i})) $ret.=$t{$i}; } return $ret; }
Discussion