Thông tin tài liệu:
MySQL et CSS- P7: Dans la première partie, lancez-vous dans la création de votre premier site web dynamique en PHP. Au travers d’exemples simples et concrets, apprenez à votre rythme à développer un site web complet, relié à une base de données MySQL
Nội dung trích xuất từ tài liệu:
MySQL et CSS- P7 Les expressions rationnelles8.2 Les expressions rationnellesDans le chapitre précédent, nous avons utilisé des expressions rationnellespour créer le nom de la table dans le programme mini-forum.php.Dans l’expression suivante, nous avons extrait le nom de fichier duchemin que nous avons écourté de son extension :preg_match(#^/.*/(.*)\.[A-z0-9]{3,4}$#, $_SERVER[‘PHP_SELF’], $tableau);Ces signes vous apparaissent sans doute comme des hiéroglyphes maisnous espérons qu’à la fin de ce chapitre, vous percevrez le langageparticulier des expressions rationnelles ou régulières. Nous utiliseronsl’adjectif « rationnelle » pour caractériser ces expressions car elles sontplutôt irrégulières dans le sens où elles ne régulent rien et sont utiliséesdifféremment pour chaque cas. En fait, « régulière » est la traduction deregular qui dans l’expression « regular expression » signifie « expressionconsacrée ». Nous emploierons donc le terme « expressions rationnelles »car ces expressions permettent une recherche générique ou abstraite sur uncertain nombre de caractères ou de groupes de caractères. Le type decaractère et sa place sont traduits sous forme de caractères de description.Nous avons donc traduit, sous une forme abstraite, un mot ou uneexpression recherchée. Ce langage est puissant mais également trèscomplexe. Nous n’en ferons pas le tour dans ce livre, nous vous aideronsseulement à comprendre certains principes et vous en proposerons lesexpressions les plus courantes.La méthodeVu le comportement très complexe des moteurs d’expressions rationnel-les, l’approche ne peut être qu’empirique. Avec un peu d’habitude, lasolution sera trouvée plus rapidement. Dans chaque recherche, vous avezun objectif. Vous voulez vérifier, extraire ou remplacer une chaîne decaractères, c’est le centre de votre stratégie. Il faut aider le moteur àtrouver des repères autour de cet objectif. Si vous recherchez www, voussavez qu’il est entouré de http:// et d’un point. Plus vous caractérisezvotre objectif, plus vous aurez de chances de le trouver. Le moteur aquelques « défauts ». Ainsi ne s’arrêtera-t-il pas au premier motif trouvémais ira jusqu’à la fin de la cible. C’est ce qu’on appelle l’avidité. Elle Double Poche PHP & MySQL • 3018 Moteurs de recherche et expressions rationnellespeut pousser le moteur à être trop perfectionniste dans sa recherche et à nepas trouver ce qu’il a sous les yeux car il cherche toujours un motifcomplémentaire.Tab. 8.3 : Début et fin de ligneSigne Description^ Début de ligne, sauf quand le signe se trouve à l’intérieur de crochets. Il signifie alors une négation.$ Fin de ligneLes parenthèses permettent de délimiter des sous-motifs qui seront stockésdans un tableau, dans le cas d’une recherche ou dans les variablesspéciales \\0 pour la totalité du motif, \\1 pour la première parenthèse…En ce qui concerne les expressions rationnelles, PHP a hérité du moduledu langage Perl et des normes POSIX. Nous allons étudier un cas assezsimple pour commencer puis verrons la syntaxe et approfondirons.Auparavant, nous ferons le panorama des fonctions du langage PHP quiutilisent les expressions rationnelles.POSIXPOSIX est une norme qui permet la portabilité sur tous les systèmes.Voici les fonctions du langage PHP aux normes POSIX.Tab. 8.4 : Fonctions pour des expressions rationnelles POSIXFonction Descriptionint ereg ( string motif, Retourne Vrai si la chaîne contient le motif.string chaîne [, arraytableau])string ereg_replace ( string Remplace le motif à l’intérieur de la chaîne par lemotif, string nouveau_motif, nouveau motif.string chaîne)eregi() Comme ereg() mais insensible à la casse302 • Double Poche PHP & MySQL Les expressions rationnellesTab. 8.4 : Fonctions pour des expressions rationnelles POSIXFonction Descriptioneregi_replace() Comme ereg_replace() mais insensible à la cassearray split ( string Découpe la chaîne en sous-chaînes au moyen dumotif_séparateur, string séparateur.chaîne [, int limite])string sql_regcase ( string Crée une expression rationnelle insensible à lachaîne) casse à partir de la chaîne. Pour PHP, le résultat sera [Pp][Hh][Pp].Quelques études de casVous voulez savoir si vous avez des chiffres dans un texte.$expression=fs5dqfdsf;if (ereg(’[0-9]’,$expression)){}L’expression est vraie car elle contient au moins un chiffre. Ici [0−9]représente la classe chiffres qui pourrait aussi être exprimée avecl’expression [[:digit:]]. Le signe − représente l’intervalle. Il s’agitde tous les chiffres inclus dans l’intervalle 0 à 9.Si vous voulez rechercher un chiffre particulier :¶ ereg(’0’,$expression) recherche le chiffre 0.¶ ereg(’[09]’,$expression) recherche les chiffres 0 ou 9 dans l’expression.Si vous souhaitez que ces chiffres ne soient pas dans l’expression,employez le caractère ^ dans les crochets. Si vous l’employez en dehorsdes crochets, il n’a plus même sens.ereg(’[^0]’,$expression) sera vrai si le chiffre 0 n’est pas dansl’expression.Rappelez-vous :if !ereg(’[^0-9]’,$table){$table.=’_’; Double Poche PHP & MySQL • 3038 Moteurs de recherche et expressions rationnellesNous vérifiions que le nom de la table créée à partir d’un nom de fichierne contient pas uniquement des chiffres. Si c’était le cas, nous aurionsajouté un blanc souligné.$contenu_txt =ereg_replace(([[:space:]]|^)[A-z0-9]{1,2}[[:space:]], ,$contenu_txt);Dans ce ...