Extraire une phrase [Résolu]

pifethercule 19 Messages postés lundi 8 février 2010Date d'inscription 29 mars 2010 Dernière intervention - 13 mars 2010 à 12:57 - Dernière réponse : Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention
- 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 

Votre réponse

10 réponses

Meilleure réponse
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 15 mars 2010 à 16:55
3
Merci
confonds pas regex et ton code en php, autour...

Renfield - Admin CodeS-SourceS - MVP Visual Basic

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 15 mars 2010 à 09:59
0
Merci
Délai.*?\.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
pifethercule 19 Messages postés lundi 8 février 2010Date d'inscription 29 mars 2010 Dernière intervention - 15 mars 2010 à 15:01
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 15 mars 2010 à 15:10
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
pifethercule 19 Messages postés lundi 8 février 2010Date d'inscription 29 mars 2010 Dernière intervention - 15 mars 2010 à 16:02
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 15 mars 2010 à 16:05
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
pifethercule 19 Messages postés lundi 8 février 2010Date d'inscription 29 mars 2010 Dernière intervention - 15 mars 2010 à 16:30
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
pifethercule 19 Messages postés lundi 8 février 2010Date d'inscription 29 mars 2010 Dernière intervention - 15 mars 2010 à 16:34
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 15 mars 2010 à 16:38
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
pifethercule 19 Messages postés lundi 8 février 2010Date d'inscription 29 mars 2010 Dernière intervention - 15 mars 2010 à 16:52
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

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.