Encore une expression régulière

Eléphanteau du PHP | 10 Messages

27 mars 2011, 11:45

Bonjour,

Je mets en place un code de suivi des téléchargements de pdf, de jpg sur mon site avec un événement onclick. Pour cela je repère les href xxxx pdf, gif, jpg avec des expressions régulières et je rajoute le javascript qu'il faut
$string = 'xx <a href="bb.gif">txt</a>';
$pattern = "/href=\"(.+)(.pdf|.gif|.jpg|.png)\"/iU";
$repl = "href=\"$1$2\" onclick=\"js('$1$2');\"";
$string = preg_replace($pattern, $repl, $string);
echo htmlentities($string)."<br />";
C'est OK et cela me donne ce que je désire
xx <a href="bb.gif" onclick="js('bb.gif');">txt</a>
Problème !!! dans mon code, j'ai aussi ça
<a href="xxx.html"><img src="img.jpg"></a>
et donc, mon expression régulière ne fonctionne plus puisqu'elle traite un href et un jpg qui se suivent mais qui ne sont pas dans le même tag.
<a href="xxx.html"><img src="imgjpg" onclick="js('xxx.html"><img src="imgjpg');"></a>
Je n'arrive pas à m'en sortir. Ce que je voudrais c'est que vous m'aidiez à contruisre une expression régulière qui repère tout ce qu'il y a entre href d'un côté et jpg, pdf, gif de l'autre mais sans < ou > entre les deux.

Voyez cet exemple
$string = 'xx <a href="bb-1.gif">txt</a> ';
$string .= '<a href="xxx.html"><img src="img.jpg"></a>';
echo htmlentities($string)."<br /><br /><br />";
$pattern = "/href=\"(.+)(.pdf|.gif|.jpg|.png)\"/iU";
$repl = "href=\"$1$2\" onclick=\"js('$1$2');\"";
$string = preg_replace($pattern, $repl, $string);
echo htmlentities($string)."<br />";
C'est cela qu'il faut adapter pour que href et .jpg, .gif ou .pdf soient dans le même tag
Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mars 2011, 13:39

Dans ton expression, tu recherche n'importe quel caractère après le href : (.+)
Pour éviter qu'il n'aille trop loin, il te suffit de lui interdire les guillemets et il ne devrait pas sortir de ton lien... a tester, mais un truc du genre : ([^\"]+) devrait convenir :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 10 Messages

27 mars 2011, 18:45

Merci. C'est exactement cela que je cherchais