Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
6065 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  preg_match_all et preg_replace avec des balises imbriquées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

preg_match_all et preg_replace avec des balises imbriquées

n°1659469
the_bigboo
Posté le 17-12-2007 à 16:52:11  profilanswer
 

Salut :)
 
Je suis en train (d'essayer) de me faire un p'tit moteur de template very light et je bute sur un probleme assez bete :/
 
J'ai par exemple ce bout de code :

Code :
  1. texte ici
  2. <bloc_1>je suis dans le bloc 1
  3. <bloc_2>Je suis dans le bloc 2
  4.  <bloc_3>Je suis dans le bloc 3</bloc_3>
  5.  Je suis sorti du bloc 3
  6. </bloc_2>
  7. Je suis sorti du bloc 2
  8. <bloc_4>
  9.  je suis dans le bloc 4
  10. <bloc_4>
  11. </bloc_1>
  12. Je suis sorti du bloc 1


 
et j'ai fait ce bout de class :

Code :
  1. class template_blocs {
  2. private $str ;
  3. private $hide = array() ;
  4. function __construct( $str )
  5. {
  6.  $this->str = $str ;
  7. }
  8. public function hideBlock( $block_idt )
  9. {
  10.  $this->hide[] = $block_idt ;
  11. }
  12. private function cleanTemplate()
  13. {
  14.  if( sizeof( $this->hide ) > 0 )
  15.  {
  16.   foreach( $this->hide as $bloc_id )
  17.   {
  18.    //echo "|<bloc_".$bloc_id.">([^>]+)<\/bloc_".$bloc_id.">|Usm<br />" ;
  19.    $this->str = preg_replace( "|<bloc_".$bloc_id.">(.*)<\/bloc_".$bloc_id.">|Usm" , "" , $this->str );
  20.   }
  21.  }
  22.  preg_match_all( "|<bloc_([^>]*)>(.*)<\/bloc_\\1>|Usm" , $this->str , $out );
  23.  while( count( $out[1] ) > 0 )
  24.  {
  25.   $this->str = preg_replace( "|<bloc_".$out[1][0].">([^>]+)<\/bloc_".$out[1][0].">|Usm" , "\$1" , $this->str );
  26.   preg_match_all( "|<bloc_([^>]*)>([^>]+)<\/bloc_\\1>|Usm" , $this->str , $out );
  27.  }
  28. }
  29. function getHtml()
  30. {
  31.  $this->cleanTemplate() ;
  32.  return $this->str ;
  33. }
  34. }


Le but c'est de dire je cache le bloc ayant l'id 3 et ca squizera automatiquement <bloc_3>........</bloc_3>
Et quand le bloc est conservé, juste oter les balises.
 
Le souci c'est que ca march un peu comme ca veux : Quand a un niveau on n'a qu'un bloc tout va bien mais quand par exemple dans le bloc 1 j'ai le bloc 2 et 4, ben tout pars en live !
Y aurait-il un spécialiste suceptible de m'expliquer ce qui cloche svp :) ?

mood
Publicité
Posté le 17-12-2007 à 16:52:11  profilanswer
 

n°1659472
FlorentG
Posté le 17-12-2007 à 16:55:30  profilanswer
 

Les regexps ne sont pas super-faites pour ce genre de cas, avec des trucs récursifs. Change de méthode :(

n°1659476
the_bigboo
Posté le 17-12-2007 à 16:58:51  profilanswer
 

Ben a part ca je vois pas quoi utiliser d'autre :/
En fait j'ai trouvé le problème, j'ai mal fermé le bloc 4 :whistle:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  preg_match_all et preg_replace avec des balises imbriquées

 

Sujets relatifs
[PHP][DOM] balises select non envoyé au serveurajouter des balises à mon texte
equivalent html des balises [quote] et [list] de bbcodeBoucles imbriquées en XSL
[RESOLU] Enlever retour à la ligne entre balises HTMLRequetes MATCH qui ne fonctionne pas, probleme d'index
Mise à jour des frames et balisesDs balises meta en trop ?
probleme SELECT en MATCH avec du HTML...[MySQL] Moteur de recherche MATCH
Plus de sujets relatifs à : preg_match_all et preg_replace avec des balises imbriquées


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)