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

が必要な理由?は、「非貪欲」にするためです。あなたのコードでは、最初の開始タグから最後の終了タグまで一致します。+and演算子はデフォルトで貪欲で、*できるだけ多くの文字を消費します。?修飾子はこの動作を停止します。

マークされたキャプチャだけでなく、一致した文字列全体にも一致するため、$m[1]代わりにダンプする必要があります。$mpreg_match*

実際の例: http://ideone.com/vXk9W

于 2012-04-26T16:31:32.450 に答える