Extraire une phrase [Résolu]

Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010
- - Dernière réponse : Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
- 15 mars 2010 à 16:55
Bonjour,
en PHP, je voudrais extraire une phrase qui commencerais à droite du mot donné jusqu'au point de fin de phrase, les expressions régulière n'étant pas vraiment mon fort, je me casse un peu les dents dessus...

voici ce que j'ai


function delai($txt){
if (preg_match('/Délai .\./', $txt, $matches)){
return $matches[0];
}
}



merci pour votre aide
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
3
Merci
confonds pas regex et ton code en php, autour...

Renfield - Admin CodeS-SourceS - MVP Visual Basic

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
Délai.*?\.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010
0
Merci
oui merci :)

j'ai eu le temps de potasser les regex ce we ;)

j'en suis arrivé la
function delai($txt){
$pattern = "#Délai (.+)\.#im";
if(preg_match($pattern, $txt, $resultat)){
$txt = $resultat[1] ;
return $txt;
}
else{
return 0;
}
}


que j'ai validé avec cet outil (pour la regex)
http://www.annuaire-info.com/outil-referencement/expression-reguliere/

mais je crois qu'en fait mon pb viens du php, appelant ma fonction de cette façon
$delai = delai($description);


ça me retourne $delai = 0...

mais la je ne sais plus si je suis au bon endroit pour poser la question, ou si je dois aller sur le forum php

au cas ou si un admin passe par ici
Commenter la réponse de pifethercule
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
fais plutot :


Délai\b[\s\S]*?\.


Pour l'appel php, je ne peux t'aider

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010
0
Merci
je décompose, c'est un peu nouveau pour moi

Délai\b[\s\S]*?\.

après "Délai" je veux un mot (\b) suivi ou non par un espace ([\s\S]), ensuite j'ai un doute (*?), 0 à n fois (*) et 0 à 1 fois (?), donc (0 à n fois) 0 ou 1 fois ? ça se décompose comme ça ?

ce qui m'interesse c'est de récupérer la phrase contenue entre mes balises "Délai" et "\.", pour les retourner dans une variable, donc je dois le mettre entre parenthèses pour que ça aille dans mon "$resultat", soit:


Délai(\b[\s\S]*?)\.

j'ai juste ?

ou peut etre qu'il y a une autre fonction que preg_match pour faire ceci ???
Commenter la réponse de pifethercule
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
\s\S => n'importe quel caractère

.*? => de 0 à n, mais non gourmand:

s'arretera au premier \. rencontré

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010
0
Merci
et pourquoi

\b[\s\S]*?

plutot que

.*

puisque je veux tout ce qui est entre mes balise

?
Commenter la réponse de pifethercule
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010
0
Merci
oups petits problèmes avec ma connexion...

je ne comprends pas vraiment l'utilité du "?" dans ".*?", mais comme je le retrouve souvent ça doit avoir une utilité :)

en tout cas c'est plein de subtilité et de logique les regex, ça me plait bien
Commenter la réponse de pifethercule
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
[\s\S]

va prendre TOUS les caractères

.

s'arrete aux sauts de ligne


le *? (ou +?) est courant, ca veux dire de pas etre gourmand...

en gros,

Début abcdef. ghijkl. mnopqrst. uvwxyz.

en gourmand, on s'arret au dernier "." rencontré
en non gourmand, on pren le minimum de caractères

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010
0
Merci
ok, ça va etre bon pour ma ligne tout ça :D

encore merci pour toutes ces explications et pour le temps passé

sans vouloir abuser, si vous connaissez un bon tuto ou pdf qui explique les regex en profondeur, la plupart de ceux que j'ai trouvés ne parlent que de preg_match ou preg_replace, et encore pas vraiment toutes les fonctions
Commenter la réponse de pifethercule