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

这样,.*构造将从“根本没有符号”状态开始匹配,逐渐扩大它,一次一个符号 - 并且在遇到字符串流中的第一部分时将停止匹配。 [/if]否则,它实际上从消耗所有字符串开始,一次释放一个符号 - 并在它面对字符串流的最后一部分时停止。 [/if]

于 2012-12-23T22:39:19.887 回答