Problème regexp pour parser fichier html

WRInaute accro
Bonjour à tous !

Mon souci du jour à trait au parsage d'une page html de mon site afin de la nettoyer pour ensuite la générer sous un autre format.

J'utilise le code suivant pour détecter la balise <SCRIPT langage="javascript">, mais le souci c'est que dans ma page j'ai plusieurs fois des <SCRIPT langage="javascript"></SCRIPT>, et mon code me récupère ce qui est contenu entre la première balise <SCRIPT langage="javascript"> et la dernière balise </SCRIPT>. Bien dommage vu que c'est a peu près tout mon fichier qui est ainsi récupéré...

Le code utilisé :
Code:
if (eregi("<SCRIPT language=javascript>(.*)</SCRIPT>", $buffer, $regs))
{
	echo "<pre>";
	print_r($regs);
	echo "</pre>";
}

le but est donc de récupérer le contenu du premier couple <SCRIPT langage="javascript"></SCRIPT> en vue de le supprimer de la variable qui contient l'ensemble du code html de mon fichier.

Si quelqu'un sait où mon expresssion regulière foire, je suis preneur :-)

edit : A priori si j'essaie d'autres regexp sur d'autres balises html, le problème posé est le même: il prends la première occurence de la balise ouvrante et la dernière occurence de la balise fermante.
 
WRInaute accro
if faut remplacer le (.*) par ([^<]*), comme cela il capturera tout ce qui ne contient pas de < et il ne prendra qu'un seul contenu :wink:
 
WRInaute accro
...

..merci Leonick ca fonctionne bien :-)

Par contre, en appliquant ce modèle de script cela ne fonctionne pas si on a des balises imbriquées (ce qui est justement mon cas).

Genre si je veux récupérer le tableau d'id tab dans une page html, et uniquement ce tableau là :

Code:
<html>
<table id="tab">
<tr><td></td>
<td></td><tr>
</table>
<table id="tab2">
<tr><td></td>
<td></td><tr>
</table>
</html>

Et là le pattern appliqué plus haut ne peut plus s'appliquer.
 
WRInaute accro
...

... en fait je voulais justement eviter de passer par un script tiers (ici du perl) pour faire cela.

C'est donc difficilement gérable de récupérer via les expressions régulières une portion de html avec des balises imbriquées sur un modèle de ce genre :

Code:
<html>
<table id="tab">
<tr><td></td>
<td></td><tr>
</table>
<table id="tab2">
<tr><td></td>
<td></td><tr>
</table>
</html>
 
WRInaute impliqué
pour ta 2ème question (tableaux imbriqués), tu pourrais essayer avec "preg_match":

$a=preg_match("`<table id=\"tab\">(.*)</table>`i",$variable_a_parser,$out)?$out:false;

ou :

$a=preg_match_all("`<table id=\"tab\">(.*)</table>`i",$variable_a_parser,$out)?$out:false;

Les 2 te renvoient un tableau $a, affiche-le avec:
echo"<pre>";print_r($a);echo"</pre>";

et fais ton choix ...

Et pour enlever les balises script et leur contenu:
$a=preg_replace("`<script[^<]+</script>`i","",$variable_a_parser);
 
Discussions similaires
Haut