[RESOLU] Preg_matche_all récupérer contenu div

Preg_matche_all récupérer contenu div [RESOLU] - PHP - Programmation

Marsh Posté le 15-12-2014 à 13:12:10    

Bonjour,
 
  Je découvre la fonction preg_matche_all mais je ne comprend surement pas toute ses subtilités.
 
Soit ma page suivante dans lequel je souhaites récupérer le contenu de "Mon bloc".

Code :
  1. <div class="Mon_bloc">Blo blo 
  2. <a href="toto.php">TOTO</a> Bla bla
  3. <a href="toto2.php">TOTO2</a>
  4. <div>TEST</div>
  5. Texte à prendre...
  6. </div>
  7. <div>
  8. TEST 2
  9. </div>


 
Je voudrais obtenir :
 

Code :
  1. Blo blo 
  2. <a href="toto.php">TOTO</a> Bla bla
  3. <a href="toto2.php">TOTO2</a>
  4. <div>TEST</div>
  5. Texte à prendre...


 
Mon code :

Code :
  1. $test = preg_match_all('#<div class="Mon_bloc">(.+)</div>#ismU', $contenu, $bloc);

m'affiche :

Code :
  1. <a href="toto.php">TOTO</a> Bla bla
  2. <a href="toto2.php">TOTO2</a>
  3. <div>TEST


 
En effet, il trouve bien le début de ma balise mais s'arrête à la première balise de fin de div !
 
Avez-vous une petite idée.
 
Merci par avance.


Message édité par snike le 15-12-2014 à 16:54:53

---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:
Reply

Marsh Posté le 15-12-2014 à 13:12:10   

Reply

Marsh Posté le 15-12-2014 à 13:37:22    

Je doute que tu y arrives via une regexp à cause de l'imbrication des div :/
Si ton php traite ce bloc en provenance d'une page déjà affichée, je t'aurais conseillé de passer par le javascript, via .innerHTML que tu aurais envoyé à php par du Ajax ;)
 
Si ton bloc contient que ce que t'as mis en premier post, je ferais ça :  
$Contenu = str_replace(array("<div class="Mon_bloc">" ), array("" ), $Bloc);
$Contenu = substr($Contenu, 0, -strlen("</div>" ));
 
Si $Bloc contient plus que ce que t'as mis en premier post, va falloir faire une petite fonction qui compte le nb de <div> ouvertes à l'intérieure de ta <div> puis recherche le dernier </div> qui clôt la dernière <div> ouverte à l'intérieur. Ensuite, y'a plus qu'à trouver la </div> suivante, celle qui clôt ta <div> dont tu veux le contenu...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 15-12-2014 à 15:05:12    

Donc pas possible, ça me rassure.
 
En faites je cherchais une solution propre mais si je dois bidouiller je peux faire.
 
Merci.


---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:
Reply

Marsh Posté le 15-12-2014 à 15:05:48    

Peut être possible en jouant avec les DOM ?


---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:
Reply

Marsh Posté le 15-12-2014 à 16:54:33    

Pour information, simplehtmldom semble répondre à mes attentes, pour ceux que cela intéresse :
http://simplehtmldom.sourceforge.net/
 


---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:
Reply

Marsh Posté le 18-12-2014 à 15:18:37    

Pour les habitués de jQuery, il y a aussi phpQuery qui permet de manipuler une page en PHP :  
https://code.google.com/p/phpquery/


---------------
www.wizit.fr
Reply

Sujets relatifs:

Leave a Replay

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