Expression réguliere

titof -  
 Laurent -
Slt tlm,

jai des pb avec une expression réguliere
je voudrais récupéré le contenu de tags
par exemple :

$test="chaine1 <tag>iii<h>i <tag>iii</tag><hhhh><tag><pppppaz 4654-_ddd</tag>";

$exp ="/<tag>(.*)(^(<\/tag>))(.*)<\/tag>/";

preg_match_all($exp, $test, $resul)
print_r($resul)

qu'il me récupere
iii<h>i <tag>iii
><pppppaz 4654-_ddd

Ce qu'il ne fait pas :(

le probleme de cette solution
$exp  ="/<tag>(.*)<\/tag>/";


Prend tout ->
iii<h>i<tag>iii</tag><hhhh><tag><pppppaz 4654-_ddd

Si quelqu'un voit la solution

thx

3 réponses

  1. Laurent
     
    En fait le fait de mettre ? limite la recherche au plut petit

    Par exemple avec (.*) il prend la chaine la plus grande c'est à dire tout ce qui est entre le premier <tag> et le dernier </tag>

    En ajoutant le ? tu demandes explicitement la chaine la plus courte qui correspond aux masque soit tout ce qui est entre le premier <tag> et le premier </tag>
    1
  2. rucht Messages postés 248 Statut Membre 1
     
    ta question n' est pas tres claire !

    si tu pouver reformuler et dire en quel langage tu programe ce serai mieu !

    rucht ( qui a rien compri )
    0
  3. titof
     
    Ben en fait, en cherchant sur le net jai trouvé la solution mais le probleme cest que je ne la comprend pas !!!!

    $chaine="chaine1 <tag>xiiix<h>yi iiiy</tag><hhhh>9<tag>ppp<tag>ppaz 4654-_ddd</tag>"; 
    $motif="`<tag>(.*?)</tag>`"; 
    preg_match_all($motif,$chaine,$out); 
    
    $nb=count($out[1]); 
    for($i=0;$i<$nb;$i++)
    { 
      echo $out[1][$i],'<br/>'; 
    }


    Si quelqu'un pouvais me traduire ca en francais
    "`<tag>(.*?)</tag>`"

    car ` et *? je ne sais vraiment pas ce que cela veux dire

    mci

    PS : le but est de récupérer lintérieur des balises <tag>
    0