我的文字是这样的:
[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);
除非在同一行上存在多个条件,否则此方法有效。
答案 0 :(得分:3)
使用...
制作明星量词non-greedypreg_match_all('/\[if-([a-z-]*)\](.*?)\[\/if\]/', $source, $m);
这样.*
构造将从“根本没有符号”状态开始匹配,逐渐扩大它,一次一个符号 - 并且当它遇到第一个 [/if]
参与字符串的流程。否则它实际上从消耗 all 字符串开始,一次释放一个符号 - 当它面向字符串流中的 last [/if]
部分时停止。 / p>