0

我有一个使用 preg_match_all 的简单 php 示例

$str = " 
Line 1: This is a string 
Line 2: [img] image_path [/img] Should not be [img] image_path2 [/img] included. 
Line 3: End of test [img] image_path3 [/img] string."; 

preg_match_all("~\[img](.+)\[/img]~i", $str, $m); 

var_dump($m);

我希望它回来

array(
    [0] =>image_path
    [1] =>image_path2
    [2] =>image_path3
)

出于某种原因,我没有得到这个结果。

蚂蚁的想法?

4

1 回答 1

1

将其更改为:

preg_match_all("~\[img](.+?)\[/img]~i", $str, $m); 

var_dump($m[1]);

你需要的原因?是让它“非贪婪”。使用您的代码,它从第一个开始标记匹配到最后一个结束标记。+和运算符默认情况下是贪婪的*,消耗尽可能多的字符。?修饰符停止此行为。

您需要转储$m[1]而不是$m因为preg_match*也匹配整个匹配的字符串,而不仅仅是标记的捕获。

现场示例:http: //ideone.com/vXk9W

于 2012-04-26T16:31:32.450 回答