2012-04-26 19 views
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); 

的一個簡單的PHP例如,我想它返回

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

由於某種原因,我沒有得到這個結果。

螞蟻的想法?

+2

* *它返回什麼? – Cal 2012-04-26 16:28:42

+0

不知道爲什麼你的標籤用[]括起來,但如果你只是尋找PHP的HTML解析檢查http://simplehtmldom.sourceforge.net爲PHP。 – pdizz 2012-04-26 16:32:22

+0

這看起來像BBCode,而不是HTML。但是也有一個PHP擴展:http://www.php.net/manual/en/function.bbcode-create.php – Cal 2012-04-26 16:33:53

回答

1

它改成這樣:

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

var_dump($m[1]); 

的原因,你需要的是?,使之「非貪婪」。使用您的代碼,它會匹配從第一個開始標記到最後一個結束標記。 +*默認情況下貪婪,消耗盡可能多的字符。 ?修飾符停止此行爲。

您需要轉儲$m[1]而不是$m,因爲preg_match*也匹配整個匹配的字符串,而不僅僅是標記的捕獲。

現場示例:http://ideone.com/vXk9W

+0

謝謝你,非常感謝 – Patrioticcow 2012-04-26 16:55:20

相關問題