Extraire une phrase avec preg_match [Résolu]

Messages postés
19
Date d'inscription
lundi 8 février 2010
Dernière intervention
29 mars 2010
- 15 mars 2010 à 17:21 - Dernière réponse :
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
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 :)
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Dernière intervention
27 avril 2012
- 15 mars 2010 à 19:06
3
Merci
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 -

Merci kohntark 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Dernière intervention
27 avril 2012
- 15 mars 2010 à 18:21
0
Merci
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 -
Commenter la réponse de kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Dernière intervention
27 avril 2012
- 15 mars 2010 à 18:25
0
Merci
... d'ailleurs l'option 'm' doit être inutile :

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

Cordialement,

Kohntark -
Commenter la réponse de kohntark
Messages postés
19
Date d'inscription
lundi 8 février 2010
Dernière intervention
29 mars 2010
- 15 mars 2010 à 18:41
0
Merci
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 ???
Commenter la réponse de pifethercule
Messages postés
19
Date d'inscription
lundi 8 février 2010
Dernière intervention
29 mars 2010
- 15 mars 2010 à 19:47
0
Merci
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
Commenter la réponse de pifethercule
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Dernière intervention
27 avril 2012
- 15 mars 2010 à 21:14
0
Merci
J'avais ce problème en tête également, ... mais même pas eu besoin de le préciser

Bonne continuation,


Kohntark -
Commenter la réponse de kohntark

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.