3 votes

Faites-moi comprendre preg_replace

J'ai cherché des informations utiles sur Internet et je pense que j'en ai trouvé trop. J'essaie de comprendre les expressions régulières mais je n'y arrive pas.

Disons par exemple $data="A bunch of text [link=123] another bunch of text." et il devrait être remplacé par "< a href=\"123.html\">123< /a>" .

J'ai fait de nombreux essais avec un code similaire à celui-ci :

$find = "/[link=[([0-9])]/"; $replace = "< a href=\"$1\">$1< /a>"; echo preg_replace ($find, $replace, $data);

mais la sortie est toujours la même que les $data d'origine.

Je pense que je dois voir quelque chose de pertinent à mon problème pour comprendre les bases.

3voto

Niet the Dark Absol Points 154811

Retirez le supplément [] autour de la () et ajouter + après le [0-9] pour la quantifier. De même, échapper à la [] qui composent la balise elle-même.

$find = "/\[link=(\d+)\]/"; // "\d" is equivalent to "[0-9]"
$replace = "<a href=\"$1.html\">$1</a>";
echo preg_replace($find,$replace,$data);

1voto

donald123 Points 1869

La regex serait \N- Lien=(( \d ]+)\]

Une bonne source pour un aperçu rapide de l'expression régulière peut être trouvée ici http://www.regular-expressions.info/

Si vous vous intéressez vraiment à la puissance des expressions régulières, vous devriez acheter ce livre : Maîtriser les expressions régulières

Un bon programme pour tester votre RexEx sur un client Windows est : RegEx-Trainer

0voto

codaddict Points 154968

Il vous manque le + et de ce fait, votre modèle correspond s'il y a un seul chiffre suivant link= .

Et il y a une paire supplémentaire de [..] En conséquence, l'extérieur [...] sera traitée comme la classe de caractères.

Vous avez aussi oublié l'échappement de la fermeture ] .

Solution :

$find = "/[link=([0-9]+)\]/";

0voto

Surace Points 691
<?php
$data= "A bunch of text [link=123] another bunch of text.";
$find = '/\[link=([0-9]+?)\]/';
echo preg_replace($find, "<a href=\"$1\">$1</a>", $data);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X