Expressions régulières-PCRE
PCRE: Perl Compatible Regular Expression (plus performants que POSIX.)
| Saisies | |
|---|---|
| $pcre = "/.../i"; | |
| $pcre = '#...#'; | |
| $pcre = '`...`'; | |
| Fonctions | |
|---|---|
| if(preg_match($pcre, $txt)) | Cherche arrêt au premier, boolean |
| if(preg_match($pcre, $txt,$tab)) | les variables $1,$2...vont dans $tab |
| echo preg_match_all($pcre, $txt,$tabResultats) | Cherche tout, retourne total |
| $resultat=preg_replace($pcre,$remplacement,$txt) | Remplace, array |
| $resultat=preg_replace($pcre,$remplacement,$txt,10) | Idem, limite à 10 modifs |
Liens utiles:
http://www.phpfrance.com/tutoriaux/index.php/2005/04/10/28-les-expressio...
http://riki-lb1.vet.ohio-state.edu/mqlin/computec/tutorials/PHP_PCRE_Che...
| preg_match | |
|---|---|
| $pcre= "/dean/"; preg_match($pcre, $txt); | Cherche dean |
| $pcre= "/dean/i"; preg_match($pcre, $txt); | Insensible à la casse |
| $pcre= "!(\\d{2})[-/](\\d{2})[-/](\\d{2}(?:\\d{2})?)!"; preg_match($pcre,$date,$tab); | recherche une date MM/DD/YYYY (boolean+array) MM/DD/YY MM-DD-YYYY MM-DD-YY stock chaque partie dans un tableau d'indice 1 à 3 |
| $pcre= "/^[\w\.]+@[\w\.]+\.[a-z]+$/i"; | |
| $dateToday = gmdate(“Y m d”); $pcre= "/(\d{4})\s(\d{2}) (\d{2})/"; preg_match($pcre, $dateToday, $tab); | Dune date |
| $pcre= "/([\w\.]+)@([\w\.]+\.[a-z]+)/i"; preg_match($pcre, $mail, $tab)); | idem stock les 2 parties (login + domaine) |
| $pcre= "/http:\/\/.*\.(com|net|org|info|biz)\/.*/"; preg_match($pcre, $txt); | Url |
| $pcre= '#<([ib])>(.*?)</\1>#'; preg_match($pcre, $txt, $tabOut); | entre balises <i> et <b> |
| $pcre="/0-9a-zA-Z/" | Hexadecimale |
| $pcre="/(\n|\r|\n\r)/"; | Fin de ligne |
| preg_match_all | |
|---|---|
| $pcre="/[\w\.]+@[\w\.]+\.[a-z]+/i"; preg_match_all($pcre, $txt, $tab); | Mails |
| $pcre= "/http:\/\/.*\.com|net|org|info|biz\/.*/"; echo preg_match_all($pcre, $txt,$tab); | Url |
| $pcre= '# (simples?)[ ,!.;:]#'; $pcre= '#\bmot?\b#';//méthode rapide preg_match_all($pcre, $txt, $out) | Optimisation avec encadrement de mot \b |
| preg_grep | |
|---|---|
| $resTab = preg_grep(“/dean/”, $tab) | $resTab contient les champs contenant dean (array) |
| preg_grep("/^\d+$/", $tab) | $tab contiendra que des non-numériques |
| preg_replace | |
|---|---|
| preg_replace(?/<([^>]*)>/e?, ?strrev(‘\\1’)?, $str) | Remplace les chaines entre <> par leurs inverses |
| $pcre= "{<br>}i"; preg_replace($pcre, "<br />", $txt); | Normalisation de br |
| $pcre= "{ \\b # start at word\n" . " # boundary\n" . "( # capture to $1\n" . "(https?|telnet|gopher|file|wais|ftp) : \n" . " # resource and colon\n" . "[\\w/\\#~:.?+=&%@!\\-]+? # one or more valid\n" . " # characters\n" . " # but take as little as\n" . " # possible\n" . ")\n" . "(?= # lookahead\n" . "[.:?\\-]* # for possible punct\n" . "(?:[^\\w/\\#~:.?+=&%@!\\-] # invalid character\n" . "|$) # or end of string\n" . ") }x"; echo preg_replace($pcre, "<a href=\"$1\">$1</a>", $text); | Créé des liens |
| $pcre= "/\/([^\/]*.jpg)/i"; $url = preg_replace($pcre, "/s800/$1", $txt); | Recherche le dernier répertoire du lien |
| $pcre="/^$/"; | Ligne vide |
| preg_replace('`^A([[:alpha:]]+(?:-[[:alpha:]]+)*).*`','$1 : wanadoo',$host) | Recupe la ville dans un host wanadoo |
| Métacaractères echappés par \ | |||
|---|---|---|---|
| ^ | Ligne commence par | $ | Ligne fini par |
| . | tout sauf retour ligne | ||
| | | alternative | ||
| ? | 0 ou 1 fois | * | 0 ou + |
| + | 1 ou + | {nb1,nb2} | quantifieur, de nb1 à nb2 |
| (le|la) | parenthèse capturant le ou la | x | x |
| (?:le|la) | non capturant | x | x |
| Classes | |
|---|---|
| [^a] | Pas de a |
| [-0-9] | Tiret interprété seulement en début de classe |
| [.] | Le point prends sa vrai signification dans une classe |
| [aeiou] | Voyelle |
| [0-9] | Numérique |
| \d | Idem |
| \D | Pas numérique |
| [az-AZ] | alphabétique |
| [az-AZ-09] | alphanumérique |
| \w | Idem + accents + _ |
| \W | pas alphanumérique |
| \s | espace |
| \S | pas d'espace |
| Options | |
|---|---|
| i | casse insensible |
| s | le point prend tout y compris le retour à la ligne |
| m | retour ligne pris en compte (multiligne) |
| Exemples | |
| $regex = '#dean?#i'; | casse |
| $regex = '#in(?i)contour(?-i)nable#'; | contour insensible, nable sensible |
| Assertions (+rapide) | |
|---|---|
| (?<=motif) | trouve une concordance à gauche |
| (?<!motif) | ne trouve pas.. |
| (?=motif) | à droite |
| (?!motif) | ne trouve pas |
| $regex = '#\dean\b(?=\scaractères)#' | |
| $pcre= '#(?=\s).*#'; preg_replace($pcre,"$1",$chaine) | Tout ce qu'il y a avant un espace |