gérer [code][/code] avec une regex

gérer [code][/code] avec une regex - PHP - Programmation

Marsh Posté le 30-07-2004 à 14:53:37    

J'essaie de gérer l'utilisation de pseudo balise [ code ] et [/ code ] dans un texte écrit par un membre de mon site. Le problème étant que je n'arrive pas à trouver la bonne regex qui puisse tout bien remplacer, en gérant bien les cas foireux ou on écrit deux balises code et on en ferme qu'une par exemple.
J'aimerai que la regex remplace uniquement les associations code /code (cela évite de remplacer un 'code' isolé et tout faire foirer l'affichage)
 

Code :
  1. $contenu = ereg_replace('\[code\](.*)\[/code\]', '<div class="code">\\1</div>', $contenu);


 
Le problème est que ça ne gère par les cas où y'a deux blocs de 'code /code' dans le message par exemple, il ne prend en compte que le 1er 'code' et le dernier '/code' et donc fusionne tout.
 
Une idée ? ça doit être une histoire de flag ?

Reply

Marsh Posté le 30-07-2004 à 14:53:37   

Reply

Marsh Posté le 30-07-2004 à 19:00:14    

Je sèche. :o

Reply

Marsh Posté le 30-07-2004 à 19:08:31    

En une seul regexp, c'est pas possible, tout simplement.

Reply

Marsh Posté le 30-07-2004 à 19:15:11    

essaye
 

Code :
  1. while (preg_match('\[code\](.*)\[/code\]', $contenu)) {
  2.    $contenu = ereg_replace('\[code\](.*)\[/code\]', '<div   class="code">\\1</div>', $contenu);
  3. }

Reply

Marsh Posté le 30-07-2004 à 19:19:45    

La syntaxe du preg_match est mauvaise. :/

Reply

Marsh Posté le 30-07-2004 à 19:33:36    

Reply

Marsh Posté le 30-07-2004 à 19:40:32    

Il faut limiter la gourmandise de la regex : le moteur cherche le motif qui correspond le plus court possible (au lieu du plus long possible). Tu mets ? apres .* pour ca.
 

Code :
  1. $contenu = preg_replace('#\[code\](.*?)\[/code\]#s', '<div class="code">\\1</div>', $contenu);


 
exemple :
[ code ] [ code ] [ / code ] [ /code ] donnera :
<div>[ code ] </div> [ /code ]
C'est pas un comportement très génant puisque la balise code n'a pas de raison d'etre imbriqué.
 
[ code ] [ /code ] [ code ] [ /code ] donnera :
<div></div><div></div>

Reply

Marsh Posté le 30-07-2004 à 19:57:29    

chacal, comme si je l'avais pas déjà fait. :o
 
karamilo, merci beaucoup, c'est impecc'. :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed