Regex et résultats étranges

Résolu/Fermé
Pallas4 - 10 oct. 2008 à 16:18
 Pallas4 - 13 oct. 2008 à 10:35
Bonjour,
J'ai un problème en PHP
je cherche à faire quelque chose capable de capturer n'importe quel texte.

j'ai pensé à ça :
preg_match_all('#\[\[(.+)\]\]#', $te2,$match, PREG_SET_ORDER  );

Si les texte sont sur deux lignes différentes pas de soucis. Mais si c'est
texte blabla bla texte2

il capture
texte]] blabla bla [[texte2


je ne comprends pas comment faire pour que dans un cas comme ça il capture texte et texte2

Quelqu'un aurait une idée ? 'jai fait quoi comme boulette ?
Merci

4 réponses

oh oui oo mais je ne comprends pas pourquoi le ? est utile ici. En effet, ça ne veut pas dire que ce qui précède est facultatif ? @_@



(enfin merci beaucoup en tous cas)
0
ohhh merci beaucoup pour cette information ça me sera très utile
0
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Non membre Dernière intervention 5 février 2025 1 526
10 oct. 2008 à 16:26
J'imagine que tu veux dire [[n'importe quel texte]]
Eh voui, les double crochets ont un sens sur CCM: ils provoquent un "magic link" (recherche automatique sur CCM de l'expression) ;-)

J'ai pas de quoi tester, mais dis moi est ce que ça marche comme ça?
'#\[\[(.+?)\]\]#'

-1
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Non membre Dernière intervention 5 février 2025 1 526
10 oct. 2008 à 17:02
Il ne faut pas prendre ici le ? comme étant un quantificateur isolé qui s'applique sur le +, il faut le prendre en couple avec le +, ça a une signification particulière.
La meilleure explication que j'ai trouvée à ce sujet est en anglais sur le site de python.
*?, +?, ??
The '*', '+', and '?' qualifiers are all greedy; they match as much text as possible. Sometimes this behaviour isn&#8217;t desired; if the RE <.*> is matched against '<H1>title</H1>', it will match the entire string, and not just '<H1>'. Adding '?' after the qualifier makes it perform the match in non-greedy or minimal fashion; as few characters as possible will be matched. Using .*? in the previous expression will match only '<H1>'.
-1