Regexp à motié foireuse

Regexp à motié foireuse - PHP - Programmation

Marsh Posté le 19-04-2008 à 18:44:46    

Salut !
 
Je suis en train de me faire une petit moteur de template hyper light.
La syntaxe en est très simple : Je définis dans le HTML des blocs comme suit :

Code :
  1. <div class="cms_bloc_categories">
  2. <ul class="cms_blocs">
  3.  <bloc_categorie_bloc_cms>
  4.  <li class="group_text">{titre_categorie}
  5.  <ul>
  6.   <bloc_cms_item><li><a href="#">{titre_item}</a></li></bloc_cms_item>
  7.  </ul>
  8.  </li>
  9. </bloc_categorie_bloc_cms>
  10. </ul>
  11. </div>


Avant je n'imbriquait pas les blocs. Il n'y en avait qu'un seul niveau. Et pour avoir le contenu d'un bloc j'utilisais :

Code :
  1. preg_match_all( "|<bloc_".$bloc_id.">(.*)<\/bloc_".$bloc_id.">|Usm" , $contenuHTML , $out );


 
Le souci est que si ça fonctionne très bien quand il n'y a qu'un seul niveau de bloc, ca ne fonctionne pas du tout quand ils sont imbriqués. Je soupsonne un probleme de gourmandise, mais avec ou sans le U ça ne change rien.
Donc si quelqu'un a une idée...
 
Merci d'avance !

Reply

Marsh Posté le 19-04-2008 à 18:44:46   

Reply

Marsh Posté le 19-04-2008 à 19:28:10    

Personne ?

Reply

Marsh Posté le 19-04-2008 à 20:07:55    

:bounce:

Reply

Marsh Posté le 19-04-2008 à 21:12:44    

:bounce:

Reply

Marsh Posté le 19-04-2008 à 22:30:04    

:bounce:

Reply

Marsh Posté le 19-04-2008 à 23:58:06    

Ton problème d'imbrication peut se régler avec un coup de récursivité :
 
function mangebloc($string) {
  $toto = preg_match (..., $string)
  if ($toto) {
    mangebloc($toto);
  }
  // faire un truc
  return $monretour
}
 
// Et donc tu appelles ta fonction une fois :
$pure_html = mangebloc($template_html);


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 21-04-2008 à 20:04:11    

That's i've done ;)

Reply

Sujets relatifs:

Leave a Replay

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