Maîtrise des expressions régulières dans PHP

| by Dennis Pallett | March 28, 2005
Quelles sont des expressions régulières ?

Une expression régulière est un modèle qui peut de diverses cordes des textes de match. En utilisant des expressions régulières vous pouvez trouver (et remplacer) certains modèles des textes, par exemple « tous mots qui commencent par la lettre A » ou « trouvent seulement des numéros de téléphone ». Les expressions régulières sont employées souvent dans des classes de validation, parce qu'elles sont un outil vraiment puissant pour vérifier des adresses d'E-mail, des numéros de téléphone, des adresses de rue, des codes postaux, et plus.

Dans ce cours d'instruction je vous montrerai comment les expressions régulières fonctionnent dans PHP, et te donne une introduction courte sur écrire vos propres expressions régulières. Je te donnerai également plusieurs l'exemple les expressions régulières qui sont employées souvent.

Expressions régulières dans PHP

Employer le regex (expressions régulières) est vraiment facile dans PHP, et là est plusieurs fonctions qui existent pour faire le regex trouvant et remplaçant. Commençons par une trouvaille simple de regex.

Aller voir la documentation de la fonction de preg_match (http://php.net/preg_match). Comme vous pouvez voir de la documentation, le preg_match est employé pour exécuter une expression régulière. Dans ce cas-ci aucun remplacement n'est fait, seulement une trouvaille simple. Copy le code ci-dessous pour lui donner un try.< ? l'exemple de php//string$str = « < bla > trouvons substance entre </bla> ces deux parenthèses précédentes » ; /exécutons regex$do = preg_match ( »/<bla> (. *) < /bla>/« , $str, $matches) ; /contrôle si le regex était successfulif ($do = vrai) {// a assorti quelque chose, montrent les htmlentities assortis d'écho de corde ($matches [« 0 »]) ; // en outre comment le texte entre les étiquettes font écho le « <br/> ». $matches [« 1 »] ;} autrement {// aucun écho de match « ne pourrait pas trouver un match » ;}? >

Ensuite après avoir couru le code, c'est probablement une bonne idée si je fais une course rapide par le code. Fondamentalement, le noyau entier du code ci-dessus est la ligne qui contient le preg_match. Le premier argument est votre modèle de regex. C'est probablement le plus important. Plus tard dans ce cours d'instruction, j'expliquerai quelques expressions régulières de base, mais si vous voulez vraiment apprendre l'expression régulière puis elle est la meilleure si vous regardez sur Google pour des exemples réguliers spécifiques d'expression.

Le deuxième argument est la corde soumise. Je suppose qui n'a besoin d'aucun expliquer. En conclusion, le troisième argument peut être facultatif, mais si vous voulez obtenir le texte assorti, ou le texte entre quelque chose, il est une bonne idée de l'employer (juste comme je l'employais dans l'exemple).

La fonction de preg_match s'arrête après qu'elle ait trouvé le premier match. Si vous voulez trouver TOUS LES matchs dans une corde, vous devez employer la fonction de preg_match_all (http://www.php.net/preg_match_all). Ce travaille assez la plus ou moins même chose, tellement là n'est aucun besoin de l'expliquer séparément.

Maintenant que nous avons eu la conclusion, faisons un trouver-et-remplacement, avec la fonction de preg_replace (http://www.php.net/preg_replace). La fonction de preg_replace fonctionne assez semblable à la fonction de preg_match, mais à la place il y a un autre argument pour la corde de rechange. Copy le code ci-dessous, et it.< couru ? l'exemple de php//string$str = « remplaçons le <bla>stuff between</bla> que le bla encadre » ; /faire le preg replace$result = preg_replace ("/<bla> (. *) < /bla>/« , « <bla>new stuff</bla> », $str) ; htmlentities d'écho ($result) ; ? >

Le résultat serait alors la même corde, à moins qu'il indique maintenant la « nouvelle substance » entre les étiquettes de bla. C'est naturellement juste un exemple simple, et des remplacements plus avançés peuvent être faits.

Vous pouvez également employer des clefs dans la corde de rechange. Dire que vous voulez toujours le texte entre les parenthèses, et ajoutez juste quelque chose ? Vous employez les $1, les $2, les clefs etc. pour ceux. Par exemple : < ? l'exemple de php//string$str = « remplaçons le <bla>stuff between</bla> que le bla encadre » ; /faire le preg replace$result = preg_replace ("/<bla> (. *) < /bla>/« , « substance de <bla>new (le vieux : $1) </bla> », $str) ; htmlentities d'écho ($result) ; ? >

Ceci imprimerait alors « remplaçons la nouvelle substance (le vieux : substance entre) que le bla encadre ». $2 a lieu pour la seconde « attraper-toute », $3 pour le tiers, etc.

C'est à son sujet pour des expressions régulières. Il semble très difficile, mais une fois que vous saisissez il est extrêmement facile pourtant l'un des outils les plus puissants en programmant dans PHP. Je ne peux pas compter le nombre de fois où le regex m'a sauvé des heures des fonctions difficiles des textes de codage.

Un exemple

Queest-ce qu'un bon cours d'instruction serait sans quelques vrais exemples ? Allons voir d'abord une fonction simple de validation d'E-mail. Une adresse d'E-mail doit commencer par des lettres ou les nombres, ont alors @, puis un domaine, finissant avec une prolongation. Le regex pour celui serait n'importe quoi de pareil : ^ [a-zA-Z0-9_ . -] + de +@ [a-zA-Z0-9 -] . [a-zA-Z0-9 - .]+$

Me laisser rapidement expliquer ce regex. Fondamentalement, la première partie indique que ce doit tout être des lettres ou des nombres. Alors nous obtenons @, et ensuite ce là devrait être des lettres et/ou des nombres encore (le domaine). Enfin nous vérifions pendant une période, et puis une prolongation. Le code pour employer ce regex ressemble à ceci : < ? php//bon e-mail$good = « john@example.com » ; /mauvais e-mail$bad = « blabla@blabla » ; /vérifions le bon e-mailif (preg_match ( »/^ [a-zA-Z0-9_ . -] + de +@ [a-zA-Z0-9 -] . [a-zA-Z0-9 - .]+$/« , $good)) {écho « E-mail valide » ;} autrement {écho « E-mail inadmissible » ;}écho « <br/> » ; /et vérifier le mauvais e-mailif (preg_match ( »/^ [a-zA-Z0-9_ . -] + de +@ [a-zA-Z0-9 -] . [a-zA-Z0-9 - .]+$/« , $bad)) {écho « E-mail valide » ;} autrement {écho « E-mail inadmissible » ;}? >

Le résultat de ceci serait « E-mail valide. E-mail inadmissible », naturellement. Nous avons juste vérifié si une adresse d'E-mail est valide. Si vous enveloppez le code ci-dessus dans une fonction, vous vous avez une fonction de validation d'E-mail. Maintenir dans l'esprit cependant que le regex n'est pas parfait : après tout, il ne vérifie pas si la prolongation est trop longue, il ? Puisque je veux garder ce short d'instruction, je ne donnerai pas le véritable regex, mais vous pouvez le trouver facilement par l'intermédiaire de Google.

Un autre exemple

Un autre grand exemple serait un numéro de téléphone. Parole que vous voulez vérifier que des numéros de téléphone et s'assurer ils étaient dans le format correct. Supposons vous voulez que les nombres soient dans le format du xxx-xxxxxxx. Le code regarderait n'importe quoi de pareil : < ? php//bon number$good = « 123-4567890 » ; /mauvais number$bad = « 45-3423423 » ; /vérifions bon numberif (preg_match ( »/ d {3} - d {7}/« , $good)) {écho « nombre valide » ;} autrement {écho « nombre inadmissible » ;}écho « <br/> » ; /et vérifient mauvais numberif (preg_match ( »/ d {3} - d {7}/« , $bad)) {écho « nombre valide » ;} autrement {écho « nombre inadmissible » ;}? >

Le regex est assez simple, parce que nous emploient D. Ceci signifie fondamentalement le « match n'importe quel chiffre » avec la longueur derrière lui. Dans cet exemple il recherche d'abord 3 chiffres, puis « - » (trait d'union) et finalement 7 chiffres. Travaille parfaitement, et fait exactement ce que nous voulons.

Quel est exactement possible avec des expressions régulières ?

Les expressions régulières sont réellement une des outils les plus puissants dans PHP, ou n'importe quelle autre langue pour cette matière (vous pouvez l'employer dans vos règles de mod_rewrite aussi bien !). Il y a tellement de toi peut faire avec le regex, et nous avons seulement rayé la surface dans ce cours d'instruction avec quelques exemples très de base.

Si vous voulez vraiment me creuser dans le regex vous suggérer recherche sur Google pour plus de cours d'instruction, et essai pour apprendre la syntaxe de regex. Il n'est pas facile, et il y a tout à fait une courbe de étude raide (à mon avis), mais la meilleure manière d'apprendre est de passer par beaucoup d'exemples, et essaye de les traduire dans l'anglais bon. Elle vraiment des aides vous apprennent la syntaxe.

À l'avenir je consacrerai un article complet strictement aux exemples, y compris les plus avançés, sans n'importe quelle explication. Mais pour maintenant, je peux seulement te donner des liens à d'autres cours d'instruction :

Le cours d'instruction minute de 30 Regex (http://www.codeproject.com/dotnet/RegexTutorial.asp)

Regular-Expressions.info (http://www.regular-expressions.info/)

Article Source: http://www.articleset.com



About the Author

Dennis Pallett is a young tech writer, with much experience in ASP, PHP and other web technologies. He enjoys writing, and has written several articles and tutorials. To find more of his work, look at his websites at http://www.phpit.net, http://www.aspit.net and http://www.ezfaqs.com. » Read more articles by Dennis Pallett
You are welcome to publish or reprint this article free of charge, provided: