Problème regexp pour parser fichier html
7 messages
• Page 1 sur 1
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
Problème regexp pour parser fichier html
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é :
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.
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: Tout sélectionner
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.
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
...
..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à :
Et là le pattern appliqué plus haut ne peut plus s'appliquer.
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: Tout sélectionner
<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.
-

julienr - WRInaute impliqué

- Messages: 913
- Inscription: 5 Aoû 2003
dans ton cas alors les regexp ne sont pas adapté, c'est plus du parsing de fichier html que tu veux faire et donc je te conseil htmlparser qui devrait etre aussi plus rapide qu'une regexp complexe
http://htmlparser.sourceforge.net/

http://htmlparser.sourceforge.net/
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
...
... 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 :
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: Tout sélectionner
<html>
<table id="tab">
<tr><td></td>
<td></td><tr>
</table>
<table id="tab2">
<tr><td></td>
<td></td><tr>
</table>
</html>
-

julienr - WRInaute impliqué

- Messages: 913
- Inscription: 5 Aoû 2003
le plus maintenable et perf reste cette solution à mon avis
http://php-html.sourceforge.net/ je mettais trompé de lien
celui ci est bien en php
http://php-html.sourceforge.net/ je mettais trompé de lien
celui ci est bien en php
- Tilt
- WRInaute impliqué

- Messages: 858
- Inscription: 26 Mar 2005
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);
$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);
7 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Google dépose 2 brevets pour AdSense - 26-03-2004
- Article sur le fichier .htaccess - 11-01-2003
- Déclarer son fichier sitemap dans le fichier robots.txt - 16-04-2007
- Sortie de GoogleStats v2.01 - 02-03-2003
- Suite de l'article sur le fichier .htaccess : l'URL rewriting - 16-01-2003
- Brevet de Google sur le contenu dupliqué - 03-01-2007
- Un brevet de Google pour de la publicité sur les téléphones mobiles - 10-01-2006
- Sitemaps : protocole commun pour Google, Yahoo et Live Search - 16-11-2006
Consultez la description détaillée des produits ou services de Google suivants : Google Sitemaps
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

