0

私のテキストは次のようなものです:

[if-abc]content of abc[/if] [if-def]content of def[/if]

一致させたい:

[if-abc]content of abc[/if] and then [if-def]content of def[/if]

しかし、私の現在の関数はすべてに一致します。終了[/if]タグの最初の出現と一致するようにするにはどうすればよいですか

$m = null;
preg_match_all('/\[if-([a-z-]*)\](.*)\[\/if\]/', $source, $m);

これは、同じ行に複数の条件が存在する場合を除いて機能します。

4

1 に答える 1

3

星の数量詞を貪欲にしないでください...

preg_match_all('/\[if-([a-z-]*)\](.*?)\[\/if\]/', $source, $m);

このようにして、.*構成は「記号がまったくない」状態から一致を開始し、一度に1つの記号ずつ徐々に拡大し、文字列のフローの最初の部分に遭遇すると停止します。 [/if]それ以外の場合は、実際にはすべての文字列を消費し、一度に1つの記号を解放することから始まり、文字列のフローの最後の 部分に面したときに停止します。[/if]

于 2012-12-23T22:39:19.887 に答える