OVH Cloud OVH Cloud

regex / pcre pour extraire ?

2 réponses
Avatar
GG
Bonjour,

Voilà, jai un champ qui contient ceci :

$ce_livre = "<TTLivre>Salammbo</TTLivre>
<NomAuteur>Flaubert</NomAuteur>
<PrenomAuteur>Gustave</PrenomAuteur>";

l'idée est d'obtenir :
$ce_livre_t = array ( "TTLivre" => "Salammbo",
"NomAuteur => "Flaubert",
"PrenomAuteur" => "Gustave");

Je connait le nom des index "TTLivre","NomAuteur" et "PrenomAuteur";

Y a t'il un moyen de la faire en une passe ?
je m'explique je sait extraire l'un ou l'autre avec ereg
mais PCRE me permettarit t'il de tout extraire et de renvoyer directement
$ce_livre_t ?

Merci.

2 réponses

Avatar
Thomas Mlynarczyk
Also sprach GG:

$ce_livre = "<TTLivre>Salammbo</TTLivre>
<NomAuteur>Flaubert</NomAuteur>
<PrenomAuteur>Gustave</PrenomAuteur>";

l'idée est d'obtenir :
$ce_livre_t = array ( "TTLivre" => "Salammbo",
"NomAuteur => "Flaubert",
"PrenomAuteur" => "Gustave");

Je connait le nom des index "TTLivre","NomAuteur" et "PrenomAuteur";

Y a t'il un moyen de la faire en une passe ?


Non, il en faut deux:

$ce_livre_t = NULL; // au cas où il n'y a pas de "match"
if( preg_match_all( '°<(w+)>(.*?)</1>°', $ce_livre, $R, PREG_SET_ORDER) )
foreach ( $R as $r ) $ce_livre_t[ $r[1] ] = $r[2];

(Pas testé)

Avatar
Thibaut Allender
"Thomas Mlynarczyk" wrote in message
news:bk9c4n$tl5$03$

Non, il en faut deux:

$ce_livre_t = NULL; // au cas où il n'y a pas de "match"
if( preg_match_all( '°<(w+)>(.*?)</1>°', $ce_livre, $R,
PREG_SET_ORDER) )

foreach ( $R as $r ) $ce_livre_t[ $r[1] ] = $r[2];


en gros, c'est recoder la fonction xml_parse() ;)