PHP preg_match_all匹配最接近的值

时间:2012-12-23 22:36:57

标签: php regex preg-match preg-match-all

我的文字是这样的:

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

除非在同一行上存在多个条件,否则此方法有效。

1 个答案:

答案 0 :(得分:3)

使用...

制作明星量词non-greedy
preg_match_all('/\[if-([a-z-]*)\](.*?)\[\/if\]/', $source, $m);

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