Expression reguliere

Résolu
pioug70 Messages postés 14 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 mars 2006 - 3 oct. 2005 à 00:13
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 - 3 oct. 2005 à 11:08
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

pioug70 Messages postés 14 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 mars 2006
3 oct. 2005 à 11:04
<?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();

?>
3
pioug70 Messages postés 14 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 mars 2006
3 oct. 2005 à 00:16
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>
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
3 oct. 2005 à 00:21
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" :)
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
3 oct. 2005 à 00:26
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));
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pioug70 Messages postés 14 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 mars 2006
3 oct. 2005 à 10:55
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!
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
3 oct. 2005 à 11:08
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 :)
0
Rejoignez-nous