Expression régulière pour extraire une chaine entre 2 tags

WRInaute discret
Bonjour,

j arrive pas à faire un truc tout con :(

Je veux extraire le texte situé entre 2 tag : <tag>texte</tag>

J'ai fais ça, ça marche que si je n 'ai qu'une seule fois "<tag>texte</tag>" dans la page :

$texte = eregi("<tag>(.*)</tag>",$page,$regs);

Mais moi j'ai "<tag>texte</tag> sd kshdf <tag>texte2</tag> etc ..." dans une même page.

Comment faire pour récupérér texte, texte2 ???


Merci
 
WRInaute discret
un truk dans le genre marcherait peut être :

$tab = explode("</tag>", $page);
$texte1 = str_replace("<tag>","",stristr($tab[1], '<tag>'));
$texte2 = str_replace("<tag>","",stristr($tab[2], '<tag>'));
etc...

ensuite si tu as un nombre indéderminé d'éléments à recupérer tu peux faire une boucle..

edit > j'avais oublié un bout.. :)
 
WRInaute accro
Code:
function extractall ($xml, $tag1, $tag2)
{
	$ok     = true;
	$i      = 0;
	while ($ok==true)
	{
		$i1 = strpos($xml, $tag1);
		$i2 = strpos($xml, $tag2);
		
		if ( ($i1!==false) && ($i2!==false) )
		{
			//echo $i1  . " / " . $i2 . " - ";
			$i1 = $i1 + strlen ($tag1);
			
			$len      = $i2 - $i1;
			$data[$i] = substr ($xml, $i1, $len);
			
			$xml      = substr ($xml, $i2+strlen($tag2), strlen($xml));
			
			//echo "<pre>" . htmlentities($data[$i]) . "</pre>\n\n\n";
			
			$i++;
		}
		else
			$ok = false;
	}
	return $data;
}

Ca fait l'extraction d'éléments entre deux tags XML et ça te sort un tableau d'éléments. Sinon, pour XML, il y a des bibliothèques pour faire cela plus proprement (ce n'est pas forcément plus fiable, par contre...).
 
WRInaute discret
Moi j'utilise ça :

$texte = eregi("<tag>([^<]*)</tag>",$page,$regs);

C'est pas super beau, ça marche pas si tu as un autre tag à l'intérieur, mais pour l'utilisation que j'en fait ça me convient tout à fait.
 
Discussions similaires
Haut