Syntaxe des masques de preg_match() - probléme de nouvelle ligne

Résolu
Mastronic Messages postés 94 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 13 juin 2012 - 12 sept. 2007 à 05:41
Mastronic Messages postés 94 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 13 juin 2012 - 12 sept. 2007 à 15:20
Bonjour,

j'ai cette fonction


preg_match('/'.$t1.'(.*)'.$t2.'/',$source,$resultat) qui fonctionne tres bien sauf si  il y a un retour à la ligne entre les balise $t1 et $t2     ( ce que je veux recuperer )

la doc (http://uk3.php.net/manual/fr/reference.pcre.pattern.syntax.php)  dit:

pour le masque (.*)

. Point  -->Remplace n'importe quel caractère, hormis le caractère de nouvelle ligne (par défaut) ; 
 
En dehors d'une classe de caractères, un point remplace n'importe quel caractère, même invisible et à l'exception du caractère de nouvelle ligne. Avec l'option PCRE_DOTALL le point remplace n'importe quel caractère, même le caractère de nouvelle ligne. La gestion des points et complètement indépendante de <var>^</var> et <var>$</var>. Le seul point commun est que les deux ont un comportement particulier vis-à-vis des caractères de nouvelle ligne. Le point n'a pas de comportement particulier dans une classe de caractères.


J'ai donc essayé d'ecrire:
preg_match('/'.$t1.'(.*)'.$t2.'/',$source,$resultat,PCRE_DOTALL)  mais la constante n'est pas reconue (je suis avec PHP 5.2.0)

il indique aussi que l'option peut être changée à l'intérieur du masque lui-même, avec des séquences mises entre "<var>(?</var>" et "<var>)</var>"   donc ici (?s)  ou un dérivé..

Je n'arrive pas à resoudre ce probléme..  comment faut t'il ecrire ce masque ?

D'avance Merci


 

1 réponse

Mastronic Messages postés 94 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 13 juin 2012
12 sept. 2007 à 15:20
je remerci sparko du tchat (IRC) pour m'avoir donner la réponse.

En fait il faut utilisé l'option gourmant 's' et ensuite le restreindre par un ? dans la parenthése...  

ce qui donne:  

 preg_match('/'.$t1.'(.*?)'.$t2.'/s',$source,$resultat)

$t1 et $t2 etant les balise qui delimite ce que l'on veut detecté.
3
Rejoignez-nous