2012-09-29 3 views
0

Je veux que l'on puisse regarder dans une chaîne et trouver toutes les occurrences d'un motif. Cela est facile à faire avec preg_match si vous connaissez le nombre d'occurrences du modèle, mais je n'arrive pas à trouver un moyen de le faire fonctionner lorsque le nombre d'occurrences n'est pas connu.capture d'un motif répétitif sans contrainte

Voici un exemple d'une requête de travail pour un savoir ensemble d'occurrences:

$pattern = '/\[VAR:(.*)\].*\[VAR:(.*)\].*\[VAR:(.*)\].*\[VAR:(.*)\]/'; 
$string = "[VAR:one] once apon a time [VAR:two]. And then there was the time that [VAR:three] went to [VAR:four]"; 
preg_match ($pattern , $string, $matches); 

print_r ($matches); 

Cela renvoie les résultats que vous attendez:

[0] => [VAR:one] once apon a time [VAR:two]. And then there was the time that [VAR:three] went to [VAR:four] 
[1] => one 
[2] => two 
[3] => three 
[4] => four 

J'ai essayé, sans succès, les variations de preg_match et preg_match_all avec le modèle (utilisant et n'utilisant pas le paramètre PREG_OFFSET_CAPTURE):

$pattern = '/\[VAR:(.*)\]/'; 

Toute aide serait grandement appréciée.

Répondre

0

Il travaille pour moi avec le motif suivant et preg_match_all

$pattern = "/\[VAR:(.*?)\]/"; 

Voir http://ideone.com/lGsHl pour votre exemple modifié. Le ? après .* le rend non gourmand.

+0

merci beaucoup. J'ai oublié le bit gourmand. – ken

Questions connexes