Expression reguliere [Résolu]

Signaler
Messages postés
14
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
27 mars 2006
-
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
-
Bonjour,

Je suis null en expression reguliere je cherche a faire simplement cela

Dans une variable contenant un fichier html je veux resortir un tableau.

Le tableau doit contenir les informations contenues entre 2 balises



<mabalisetoto> mon texte <mabalisey>

<mabalisetoto> mon autre texte <mabalisey>




<mabalisetoto> mon texte autre <mabalisey>



la fonction qui marche PAS

function getInfo($deb, $fin, $page) {

$retour = array ();

$pregs = "";
preg_match_all("#$deb(.*)$fin#", $page, $pregs);



foreach ($pregs[0] as $pr) {

$retour = array_merge($retour, $pr);

}

return $retour;

}

et j'aimerai qu'elle me retourne:un tableau contenant:

$retour[0] -> mon texte

$retour[1] -> mon autre texte

$retour[2] -> mon texte autre

au lieu de

$retour[0] -> mon texte mon autre texte mon texte autre



Merci de votre reponse ca fait deja 1/2 journee que je cherche

6 réponses

Messages postés
14
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
27 mars 2006

<?php

class Test {



function Test() {

$page = fread(fopen("test.data", "r"), filesize("test.data"));

$page = $this->cleanPage($page);

$infos = $this->getInfo('<mabalisetoto>', '<mabalisey>', $page);

foreach ($infos as $info) {

echo "
".$info."\n";

}

}

function getInfo($deb, $fin, $page) {

$retour = array ();

$pregs = "";

$lendeb = strlen($deb);

$lenfin = strlen($fin);

preg_match_all("|$deb(.*)$fin|U", $page, $pregs);

foreach ($pregs[0] as $pr) {

$retour = array_merge($retour, $pr);

}

return $retour;

}

function cleanPage($page) {

$page = str_replace(CHR(10), "", $page);

$page = str_replace(CHR(13), "", $page);

return $page;

}

}



$Test = new Test();

?>
Messages postés
14
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
27 mars 2006

Oups j'ai oubli j'appel la fonction getinfo avec les param suivant:

$page=fread(fopen("fic.test", "r"), filesize("fic.test"));

$this->getInfo('<mabalisetoto>', '<mabalisey>', $page);



fic.test





<mabalisetoto> mon texte <mabalisey>

<mabalisetoto> mon autre texte <mabalisey>



<mabalisetoto> mon texte autre <mabalisey>
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Salut,



function getInfo($deb, $fin, $page) {

$retour = array ();

$pregs = array();

preg_match_all("#$deb(.*)$fin#", $page, $pregs);



foreach ($pregs[0] as $pr) {

$retour = array_merge($retour, $pr);

}

return $retour;

}



Puis si c'est pas mieux, change tes délimiteur en / ou | ou @

(ce sont des délimiteurs que j'ai plus souvent croisés que #... )



A part ça, ton masque de recherche à l'air tout fait "tip-top" :)
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Aaaaaaaah merci de préciser comment tu appel la fonction !!!





$page = file_get_contents( $filename);





preg_match cherche dans une chaine de caractère, pas dans une "ressource fichier"...

Et puis, au cas où il y'ait un saut de ligne entre tes balises toto et tata :

$page = str_replace("\n","",file_get_contents( $filename));
Messages postés
14
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
27 mars 2006

he he ben c ca mon probleme c que j'ai fais un
str_replace("\n","",file_get_contents( $filename)); et ben la
l'expression reguliere fonctionne pas!!! elle me ressort toute la ligne
il faudrai que je rajoute dans l'expression de ressortir des qu'elle
trouve la variable $fin!
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
A mon avis, tu te gourre... t'as foncin fonctionne mais tu l'utilise mal :(



Au lieu de ça :

foreach ($pregs[0] as $pr) {

$retour = array_merge($retour, $pr);

}





Fait plutôt ça :

echo nl2br(r_print($pregs,true));



Histoire de voir ce que te ressort réellement le preg_match_all. Car je
crois que dans le premier élément du tableau ressorti, il y'a toute la
chaine :)