Extraire une phrase avec preg_match

Résolu
pifethercule Messages postés 19 Date d'inscription lundi 8 février 2010 Statut Membre Dernière intervention 29 mars 2010 - 15 mars 2010 à 17:21
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 15 mars 2010 à 21:14
Bonjour,

je tente vainement d'extraire une phrase d'un texte avec une regex...

ma fonction, j'extrait tout ce qui se trouve entre "Délai" et le point de fin de phrase qui suit:
function delai($txt){
$pattern = "#Délai(.*?)\.#im";
if(preg_match($pattern, $txt, $resultat)){
return $resultat[1] ;
}
}


et ma façon de l'appeler et récupérer
$delai = delai($description);

echo $delai;


ça ne me retourne rien...

si quelqu'un sait ou je me trompe, je l'en remercie d'avance :)

6 réponses

kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 mars 2010 à 19:06
le "s" je le mets comme ça ?

Tu n'as pas besoin de mettre le 's' avec la regex que je te proposais puisqu'elle n'utilise pas le symbole point (ici le '.' est considéré comme le caractère point)

"`Délai([^.]*)`i"
=> recherche tous les caractères qui suivent "délai" (quelque soit la casse) sauf le point. Le moteur regex s'arrête donc au premier point trouvé.

donc ou est-ce que j'ai faux ? j'utilise mal preg_match ???

La regex proposait devrait convenir d'après les infos que tu fournis, et elle fonctionne avec la phrase que tu donnes :

<?php
function delai($txt) {
    if (preg_match("`Délai([^.]*)`i", $txt, $resultat)) return $resultat[1] ;
    return false;
}

$txt = 'Délai 5 à 6 semaines hors congés.';

echo delai($txt);
?>


Si ce n'est pas le cas poste la chaîne complète à analyser.


Cordialement,


Kohntark -
3
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 mars 2010 à 18:21
Salut,

Ca doit fonctionner si le point est situé sur la même ligne. Si ce n'est pas le cas il faudrait utiliser l'option 's' qui permettrait au point . de prendre en compte les nouvelles lignes.
Mais pourquoi pas un truc du genre :

$pattern = "`Délai([^.]*)`im";

Cordialement,

Kohntark -
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 mars 2010 à 18:25
... d'ailleurs l'option 'm' doit être inutile :

$pattern = "`Délai([^.]*)`i";

Cordialement,

Kohntark -
0
pifethercule Messages postés 19 Date d'inscription lundi 8 février 2010 Statut Membre Dernière intervention 29 mars 2010
15 mars 2010 à 18:41
merci

le "s" je le mets comme ça ?
$pattern = "#Délai([^.]*)#is"


mais ça ne me retourne toujours rien...

par contre si je fais
function delai($txt){
$pattern = "#Délai(.*?)\.#im";
if(preg_match($pattern, $txt, $resultat)){
return $resultat[1] ;
}
else{
return 0;
}
}


ça me retourne bien 0

et dans ma phrase test j'ai bien le motif recherché :
Délai 5 à 6 semaines hors congés.

donc ou est-ce que j'ai faux ? j'utilise mal preg_match ???
0

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

Posez votre question
pifethercule Messages postés 19 Date d'inscription lundi 8 février 2010 Statut Membre Dernière intervention 29 mars 2010
15 mars 2010 à 19:47
au temps pour moi, le problème venait de l'encodage...

je passais ma variable d'abord en utf-8 et ensuite j'appelais ma fonction, en faisant l'inverse ça marche nickel


encore merci pour l'aide et les corrections
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 mars 2010 à 21:14
J'avais ce problème en tête également, ... mais même pas eu besoin de le préciser

Bonne continuation,


Kohntark -
0