Regex et résultats étranges

Résolu
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
Configuration: Yahoo! Slurp Indeterminable

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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)
    1. ohhh merci beaucoup pour cette information ça me sera très utile
      1. Modérateur
        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. Modérateur
          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>'.