2012-04-26 10 views
0

私はpreg_match_allPHPでテキスト内に複数のタグが出現する方法を教えてください。

$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

+0

あなたのタグが[]で囲まれている理由はわかりませんが、PHPのhtml解析を探しているのならPHPのhttp://simplehtmldom.sourceforge.netをチェックしてください。 – pdizz

+0

これは、HTMLではなく、BBCodeのように見えます。しかし、それにもPHPの拡張機能があります:http://www.php.net/manual/en/function.bbcode-create.php – Cal

答えて

1

変更を:

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

var_dump($m[1]); 

あなたが?を必要とする理由は、それが「非貪欲」にすることです。コードでは、最初の開始タグから最後の終了タグまでが一致します。 +*オペレータは、デフォルトでは欲張り、可能な限り多くの文字を消費します。 ?修飾子はこの動作を停止します。

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

ライブ例:http://ideone.com/vXk9W

+0

ありがとう – Patrioticcow

関連する問題