Extraire une phrase

Résolu
pifethercule Messages postés 19 Date d'inscription lundi 8 février 2010 Statut Membre Dernière intervention 29 mars 2010 - 13 mars 2010 à 12:57
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 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

10 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 mars 2010 à 16:55
confonds pas regex et ton code en php, autour...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 mars 2010 à 09:59
Délai.*?\.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
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 à 15:01
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 mars 2010 à 15:10
fais plutot :


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


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

Renfield - Admin CodeS-SourceS - MVP Visual Basic
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 à 16:02
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 ???
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 mars 2010 à 16:05
\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
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 à 16:30
et pourquoi

\b[\s\S]*?

plutot que

.*

puisque je veux tout ce qui est entre mes balise

?
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 à 16:34
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 mars 2010 à 16:38
[\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
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 à 16:52
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
0
Rejoignez-nous