Extraire une phrase [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
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
confonds pas regex et ton code en php, autour...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Délai.*?\.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010

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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
fais plutot :


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


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

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010

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 ???
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
\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
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010

et pourquoi

\b[\s\S]*?

plutot que

.*

puisque je veux tout ce qui est entre mes balise

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

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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
[\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
Messages postés
19
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
29 mars 2010

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