[PHP][EREG]Comment extraire un div

Gerard Klein -  
 xenetis -
Bonjour,

Les expressions rationnelles, c'est quand on croit les comprendre qu'on s'aperçoit qu'en fait... non.

Voilà, je fais un script qui doit chercher le contenu de la balise <div id="menu">contenu balise</div>

Je fait donc :
eregi ('<div id="menu">(.*)</div>',$content,$test);

Et ça marche pas... En fait, la balise de fermeture n'est pas la balise de fermeture du div menu, mais de son conteneur (la page...).
Comment faire pour qu'il ne selectionne le contenu que jusqu'à la balise de fermeture suivnate ?

Par avance, merci !
A voir également:

3 réponses

xenetis
 
Pour avoir cherché un bon moment ce genre de chose je poste une réponse puisque ce forum ressort dans les premier :

Donc si tu as par exemple :
<div id="menu">contenu de la balise menu</div>
<div id="menu2">contenu de la balise menu2</div>

Et que tu veux récupérer seulement le contenu de la balise menu tu peux utiliser la fonction preg_match_all.
La syntaxe est :
preg_match_all("#<div id=\"menu\">(.*)</div>#", $mon_texte, $return);


Ceci te prendra que le contenu du div menu et s'arrêtera au premier </div> et non au dernier comme la fonction ereg ...
1
alexlink Messages postés 398 Date d'inscription   Statut Membre Dernière intervention   42
 
Le * selectionne tous, même le </div>.
Je ne connait pas trop les regex, mais tu devrais soustraire à ce * les </div>.
0
Gerard Klein
 
Merci pour ta réponse alexlink.
Hélas, j'ai déjà testé le [^</div>], et cela ne résoûd pas le problème...

Mais merci quand même !
0
alexlink Messages postés 398 Date d'inscription   Statut Membre Dernière intervention   42 > Gerard Klein
 
Ah c'est bizarre ça ..... ^ ça veut dire sauf ?

Bah .... y'a pas une expression qui arrête le travail de la fonction à </div> ? ( avec tous les symbôles disponibles en regex, il doit bien y en avoir un qui fait ça :) ).
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
Moi je te propose de couper la fin de ta chaine puisque c'est ca que tu veux oter non ?
C'est sur c 'est pas trop optimisé comme reponse mais en attendant, si tu veux pas trop t'éterniser la dessus !


Bonne chance
++
0
Gerard Klein > kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci kij pour ta réponse.

Oui, c'est en effet une solution possible.
Malheureusement, et comme tu le souligne, c'est pas trop optimisé, et compte tenu du grand nombre de page à traiter, cela me serait préjudiciable...
Cependant, ça reste une bonne solution temporaire !

@+
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention  
 
Salut,

Je rencontre parfois le même problème que toi. C'est à dire que l'expression ne prends pas les blocs un par un mais le plus gros bloc qui correspond à l'expression.

Je n'ai toujours pas trouvé de solution à ça , c'est dommage que les expressions régulières n'aient pas d'opérateur de négation, ce serait bien pratique....

Mais je suis sûr qu'il ya une parade à celà....
0
kimist109
 
met (.*?) a la place de (.*)

et lit la doc des regex


courage
0