Extraire une phrase avec preg_match

Résolu
Signaler
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010
-
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
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

Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
... d'ailleurs l'option 'm' doit être inutile :

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

Cordialement,

Kohntark -
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010

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 ???
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010

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
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
J'avais ce problème en tête également, ... mais même pas eu besoin de le préciser

Bonne continuation,


Kohntark -