IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Expression régulière et balises html


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Expression régulière et balises html
    Salut a tous,
    Voila j'ai une expression régulière pour graber une partie html
    Par exemple: je veux la 1ere balise table dans cette chaine,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <table><tr><table><tr>anything2</tr></table><td>any<table><tr>anything2</tr></table></td></tr></table><table><tr>anything2</tr></table>
    Et cette expression marche pas (#<table[^>]*?>(.*)</table>#si)
    quand il y a imbrication de balise table, elle a retournes une faux résultat,

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 13
    Points
    13
    Par défaut solution
    J'ai trouve une solution efficace et ca marche très bien et taster mais pas une expression régulière .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function innerHTML($tag,$ntag,$htm){
      $pos0=-1;$pos1=-1;$p=array();$p_=0;$a_=0;$pf=false;
      do {
         $pos0=strpos($htm,$tag,$a_)   ;
         $pos1=strpos($htm,$ntag,$p_)  ;
         if(is_bool($pos1)) break;
         if(!is_bool($pos0) && ($pos0<$pos1)){
             $p[]=$pos1;
             $a_=$pos0+strlen($tag); 
             continue;
         }
         if(is_bool($pos0) || $pos1<$pos0){
              array_pop($p);
              $pf=$pos1;
              $p_=$pos1 +strlen($ntag);
         }
      }while(count($p)!==0);         
      return (($pf) ? substr($htm,0,$pf+strlen($ntag)) : false);    
    }

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Je suppose que le caractère non gourmand de votre expression est mal indiqué :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    #<table[^>]*>(.*)</table>#siU
    La partie correspondant à la parenthèse capturante était en effet gourmande.

  4. #4
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Ou bien encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #<table[^>]*>(.*?)</table>#si
    (et pas de ? apres le [^>] car seul le point est "gourmand")

  5. #5
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Salut,

    Je m'intéresse depuis peu aux expressions régulières!

    Pouvez vous expliquer ce que veut dire "gourmand"?

    Merci d'avance, Philippe

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Qu'une expression régulière cherchera la correspondance la plus longue possible par rapport au motif.
    Soit la chaîne : <b>un</b> mot en <b>gras</b>
    Le motif gourmand, ~<b>(.*)</b>~ va donc capturer une seule occurrence : un</b> mot en <b>gras
    Les motifs non gourmands, ~<b>(.*?)</b>~ ou ~<b>(.*)</b>~U capturera : un et gras (suivant la fonction utilisée)

    Ici il est question des expressions rationnelles PCRE.

Discussions similaires

  1. Expression régulière sur code HTML
    Par goliath dans le forum Général Python
    Réponses: 4
    Dernier message: 03/09/2009, 18h02
  2. [RegEx] Expression régulière pour balises XML
    Par vodasan dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2008, 08h31
  3. [RegEx] expressions régulières et balises <img ?
    Par Dharius dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2007, 17h14
  4. [Regexp]Expressions régulières et code HTML
    Par Rayool dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 22/09/2006, 10h01
  5. [Expressions Réguliéres]indexation page html
    Par PadawanProg dans le forum Général Python
    Réponses: 2
    Dernier message: 29/10/2005, 04h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo