PHP - Expressions régulières

Fermé
Lewis Networks - 6 sept. 2006 à 23:38
bot1fo Messages postés 10 Date d'inscription lundi 3 juillet 2006 Statut Membre Dernière intervention 8 septembre 2006 - 8 sept. 2006 à 12:44
Bonjour,

J'essaie de programmer un système de BBCode pour mon site, tout fonctionne sauf lorsque je veux imbriquer plusieurs BBCode,

Du genre:
[URL U="..." T="..."][THUMB T="..."]...[/THUMB][/URL]


Le code:
[THUMB T="..."]...[/THUMB]
est correctement parsé, par contre pour [URL U="..., la regexp prend en compte la totalité du code généré, donc cela donne:
<a href="..." T="..." onclick="..." T="..."><img src="..." alt="..." /></a>


Je pense que le la solution que les " ne soient pas pris en compte dans la condition de la regexp (.*?), je ne sais pas comment faire ceci.

Voici le code PHP:

$pattern = array(
  '`\[THUMB T="(.*?)"](.*?)\[/THUMB]`',
  '`\[URL U=".*?" T=".*?"](.*?)\[/URL]`'
);

$replace = array(
  '<img src="$2" class="item-picture" alt="$1" />',
  '<a href="$1" onclick="javascript:window.open(\'$1\'); return false" title="$3">$2</a>',
);

$content = preg_replace($pattern, $replace, $content);  




Merci d'avance pour toute aide, il me reste juste à résoudre ce problème pour terminer mon dernier site, tout fonctionne autrement. @++
A voir également:

1 réponse

bot1fo Messages postés 10 Date d'inscription lundi 3 juillet 2006 Statut Membre Dernière intervention 8 septembre 2006 5
8 sept. 2006 à 12:44
Au lieu de ".*?" essai de mettre ceci : "[^"]*".
En gros le .* prend tout le reste de ta chaine, en excluant le " tu t'arrêteras au prochain " trouvé et donc tu ne parseras pas la totoalité de ta chaine. A tester.
Pour t'aider : http://www.aidejavascript.com/article146.html#top_form
0