Problème regexp pour parser fichier html

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par UsagiYojimbo, 28 Décembre 2006.

  1. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 974
    J'aime reçus:
    121
    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.
     
  2. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    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:
     
  3. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 974
    J'aime reçus:
    121
    ...

    ..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.
     
  4. julienr
    julienr WRInaute impliqué
    Inscrit:
    5 Août 2003
    Messages:
    939
    J'aime reçus:
    2
    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/
    :)
     
  5. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 974
    J'aime reçus:
    121
    ...

    ... 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> 
    
     
  6. julienr
    julienr WRInaute impliqué
    Inscrit:
    5 Août 2003
    Messages:
    939
    J'aime reçus:
    2
  7. Tilt
    Tilt WRInaute impliqué
    Inscrit:
    26 Mars 2005
    Messages:
    752
    J'aime reçus:
    0
    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);
     
Chargement...
Similar Threads - Problème regexp parser Forum Date
Probleme 2 condition SQL regexp ou like Développement d'un site Web ou d'une appli mobile 27 Juin 2009
Probleme Url rewriting+regexp URL Rewriting et .htaccess 23 Mars 2007
Petit probleme regexp Développement d'un site Web ou d'une appli mobile 23 Août 2006
problème avec le développeur Droit du web (juridique, fiscalité...) 22 Juin 2022
Problème désindexation des pages de Google Débuter en référencement 21 Juin 2022
Problème d'indexation de pages sur Google Problèmes de référencement spécifiques à vos sites 31 Mai 2022
problème de redirection non souhaitée Administration d'un site Web 28 Avril 2022
Problème d'indexation Produits Prestashop Crawl et indexation Google, sitemaps 28 Avril 2022
Problème d'affichage des campagnes Google Ads dans un tableau de bord Data Studio AdWords 26 Avril 2022
Problème de vitesse d'affichage des pages sur Analytics Google Analytics 26 Avril 2022
Problème : Google Crawl et Index des pages en No Index et bloqué par le robot.txt Crawl et indexation Google, sitemaps 26 Avril 2022
Problème avec GA4 : nb de visiteurs temps réel et par jour Google Analytics 19 Avril 2022
Problème indexation pages précises en React.js Débuter en référencement 19 Avril 2022
Problème de référencement Demandes d'avis et de conseils sur vos sites 8 Avril 2022
Problème adsence : Annonces ne s'affichent plus AdSense 10 Mars 2022
problèmes procédures stockées Administration d'un site Web 9 Mars 2022
Problème récupération fichier vps Développement d'un site Web ou d'une appli mobile 5 Mars 2022
Problème config postfix. Administration d'un site Web 5 Mars 2022
Search Console Problème d'indexation Crawl et indexation Google, sitemaps 24 Février 2022
Problème d'url canonique Problèmes de référencement spécifiques à vos sites 22 Février 2022