0

文字列を調べて、パターンのすべての出現を見つける機能が必要です。パターンの出現回数がわかっている場合、これは preg_match で簡単に実行できますが、出現回数がわからない場合にこれを機能させる方法がわかりません。

既知の出現セットに対する実用的なクエリの例を次に示します。

$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 );

これにより、期待どおりの結果が返されます。

[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

パターンでpreg_matchpreg_match_allのバリエーションを試してみましたが失敗しました (PREG_OFFSET_CAPTURE パラメーターを使用する場合と使用しない場合の両方):

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

どんな助けでも大歓迎です。

4

1 に答える 1

0

次のパターンで機能し、preg_match_all

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

変更した例については、 http://ideone.com/lGsHlを参照してください。

?後は.*貪欲ではありません。

于 2012-09-29T21:29:33.303 に答える