Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2008, 00h40   #1
Invité de passage
 
Inscription : septembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 17
Points : 2
Points : 2
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 :
<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,
AMINE_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 01h48   #2
Invité de passage
 
Inscription : septembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 17
Points : 2
Points : 2
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 :
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);    
}
AMINE_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 11h36   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Je suppose que le caractère non gourmand de votre expression est mal indiqué :
Code X :
#<table[^>]*>(.*)</table>#siU
La partie correspondant à la parenthèse capturante était en effet gourmande.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2008, 11h11   #4
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Ou bien encore
Code :
#<table[^>]*>(.*?)</table>#si
(et pas de ? apres le [^>] car seul le point est "gourmand")
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2008, 11h41   #5
Membre habitué
 
Inscription : avril 2003
Messages : 192
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 192
Points : 141
Points : 141
Salut,

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

Pouvez vous expliquer ce que veut dire "gourmand"?

Merci d'avance, Philippe
Philippe PONS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2008, 11h48   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h05.


 
 
 
 
Partenaires

Hébergement Web