|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PHP - Expressions régulièresQu'est-ce qu'une expression régulière?Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au modèle. Ce système est emprunté au système POSIX (un système d'exploitation). De nombreux scripts sous UNIX les utilisent (notamment Perl). En réalité il s'agit d'un système fort ingénieux (et aussi très puissant) permettant de retrouver un mot, ou une phrase (et même beaucoup d'autres choses en réalité) dans un texte, ressemblant au modèle que l'on a construit... Construire une expression régulièreLes expressions régulières permettent de rechercher des occurrences (c'est-à-dire une suite de caractères correspondant à ce que l'on recherche) grâce à une série de caractères spéciaux. L'expression régulière en elle-même est donc une chaîne de caractère contenant des caractères spéciaux et des caractères standards... Les symboles ^ et $ indiquent le début ou la fin d'une chaîne, et permettent donc de la délimiter. "^debut": chaîne qui commence par "debut" "fin$": chaîne qui se termine par "fin" "^chaîne$": chaîne qui commence et se termine par "chaîne" "abc": chaîne contenant la chaîne "abc"Les symboles *, + et ?, respectivement "zero ou plusieurs", "un ou plusieurs", "un ou aucun", permettent de donner une notions de nombre. "abc+": chaîne qui contient "ab" suivie de un ou plusieurs "c" ("abc", "abcc" ...) "abc*": chaîne qui contient "ab" suivie de zero ou plusieurs "c" ("ab", "abc" ...) "abc?": chaîne qui contient "ab" suivie de zero ou un "c" ("ab" ou "abc") "^abc+": chaîne commençant par "ab" suivie de un ou plusieurs "c" ("abc", "abcc" ...) Les accolades {X,Y} permettent de donner des limites de nombre. "abc{2}": chaîne qui contient "ab" suivie de deux "c" ("abcc") "abc{2,}": chaîne qui contient "ab" suivie de deux "c" ou plus ("abcc" etc..) "abc{2,4}": chaîne qui contient "ab" suivie 2, 3 ou 4 "c" ("abcc" .. "abcccc")A noter que le premier nombre de la limite ("{0,2}", mais pas "{,2}") est obligatoire. Les symboles vu précedemment ('*', '+', and '?') sont équivalents à "{0,}", "{1,}", et "{0,1}". Les parenthèses ( ) permettent de représenter une séquence de caractères. "a(bc)*": chaîne qui contient "a" suivie de zero "bc" ou plusLa barre verticale | se comporte en tant qu'opérateur OU "un|le": chaîne qui contient "un" ou "le" "(un|le) chien": chaîne qui contient "un chien" ou "le chien" "(a|b)*": chaîne qui contient une suite de "a" ou de "b"Le point . indique n'importe quel caractère (une fois) "^.{3}$": chaîne qui contient 3 caractèresLes crochets [ ] définissent une liste de caractères autorisés (ou interdits). Le signe - permet quand à lui de définir un intervalle. Le caractère ^ après le premier crochet indique quand à lui une interdiction. "[abc]": chaîne qui contient un "a", un "b", ou un "c" "[a-z]": chaîne qui contient un caractère compris entre "a" et "z" "^[a-zA-Z]": chaîne qui commence par une lettre "^[^a-zA-Z]": chaîne qui ne commence pas par une lettre
"[\+?{}.]": chaîne qui contient un de ces six caractères "[]-]": chaîne qui contient le caractère "]" ou le caractère "-" Voici un tableau récapitulatif des caractères spéciaux utilisés dans les expressions régulières :
chaîne composée d'un ou plusieurs caractère(s) alphanumérique(s) "^[:alnum:]+$"chaîne contenant un caractère de ponctuation ou un caractère d'espacement "[:punct:]|[:space:]"Un nombre "^[:digit:]+$" Les fonctions de manipulation d'expressions régulièresPHP fournit quelques fonctions de bases permettant de manipuler des chaînes à l'aide d'expressions régulières. Les fonctions ereg() et eregi()La fonction ereg() dont la signature est la suivante :
La fonction eregi() dont la signature est la suivante :
<? $fp = fopen("http://www.commentcamarche.net","r"); //lecture du fichier while (!feof($fp)) { //on parcoure toutes les lignes $page .= fgets($fp, 4096); // lecture du contenu de la ligne } $titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre /* Le titre commence par <title>, puis contient n'importe quelle chaîne, et se termine par </title> */ echo $regs[1]; // on retourne la premiere occurrence trouvée // Les occurrences se trouvent entre parenthèses // $regs[0] renvoie toute la chaîne fclose($fp); ?> Les fonctions ereg_replace() et eregi_replace()La fonction ereg_replace() dont la signature est la suivante :
$Texte = "Bienvenue a Toto dans le mondes des expressions régulières"; $Texte = ereg_replace("To(to)","<b>\\1ti \\0</b>",$Texte); Le code suivant (utilisation avancée des expressions régulières) remplace un URL par un hypertexte HTML (il remplace toute suite de caractères de ponctuations et alphanumériques commençant par http://, ou ftp:// par le même texte (sans le http://) entre balises HTML hypertexte...) :
$Texte = "Bienvenue sur http://www.commentcamarche.net cher ami"; $Texte = ereg_replace("(http://)(([[:punct:]]|[[:alnum:]])*)", "<a href=\"\\0\">\\2</a>",$Texte); La fonction eregi_replace() dont la signature est la suivante :
La fonction split()La fonction split() possède la syntaxe suivante : tableau split (chaîne expression, chaîne texte [, entier limite])La fonction split() retourne un tableau à partir d'une chaîne et d'une expression régulière. La limite, optionnelle permet de limiter la taille du tableau retourné. Dans ce cas le dernier élément du tableau contient le reste de la chaîne. Si une erreur se produit, split retourne 0. <? // découpe une phrase en un tableau de mots // on utilise split au cas ou plusieurs espaces séparent les mots $phrase = "Ceci est une phrase avec trois espaces ici"; $tableau_mots = split(" +",trim($phrase)); // un espace ou plus ?> La fonction sql_regcase()La fonction sql_regcase() possède la syntaxe suivante : chaîne sql_regcase (chaîne texte)Elle retourne une expression régulière qui représente la chaîne passée en paramètre sans tenir compte de la case. Chaque caractère de la chaîne est representé entre crochets, avec deux caractères à l'intérieur un en majuscule et l'autre en minuscule, ou le cas échéant deux fois le même caractères. Aucune explication ne vaut un bon exemple ;) <? echo sql_regcase("un test"); // affiche [Uu][Nn][ ][Tt][Ee][Ss][Tt] ?>Cette fonction permet de générer une chaîne non sensible à la casse, pour les expressions régulières dans les bases de données par exemple. Dans MySQL lorsque vous utilisez la fonction REGEXP (au lieu de LIKE) la recherche est sensible à la casse. La solution est donc de générer une chaîne non sensible à la casse à l'aide de sql_regcase. <? $motclef = sql_regcase("motclef"); $sql = "SELECT * from table WHERE champ REGEXP \"[[:<:]]$motclef[[:>:]]\""; // selectionne tous les enregistrements de la table table, contenant le MOT motclef ?> Trucs & astuces pertinents trouvés dans la base de connaissances
Discussions pertinentes trouvées dans le forum
| |