[PHP][EREG]Comment extraire un div

Fermé
Gerard Klein - 12 avril 2005 à 15:52
 xenetis - 30 nov. 2009 à 15:54
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

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 jeudi 30 septembre 2004 Statut Membre Dernière intervention 24 juin 2008 42
12 avril 2005 à 16:54
Le * selectionne tous, même le </div>.
Je ne connait pas trop les regex, mais tu devrais soustraire à ce * les </div>.
0
Gerard Klein
12 avril 2005 à 17:07
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 jeudi 30 septembre 2004 Statut Membre Dernière intervention 24 juin 2008 42 > Gerard Klein
13 avril 2005 à 14:30
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 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
12 avril 2005 à 17:20
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 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013
12 avril 2005 à 17:30
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013
12 avril 2005 à 19:56
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
met (.*?) a la place de (.*)

et lit la doc des regex


courage
0