プロが教える店舗&オフィスのセキュリティ対策術

<html>

<div></div>

<div class="content">
<b>内容<b/><br />
<img src="#" />
<p>ほげほげほげほげ</p>
</div>

<div></div>

</html>

上のようなHTMLがあるとします。<div>の前後にもhtmlは書かれています。
そこから正規表現で<div class="content">~~~</div>の中身を取り出したいのですが、できません。
言語はPHPで、

/<div class=\"content\">.*<\/div>/
と書いてみたんですが、改行などがありうまくいきませんでした。

どのようにに記述すればうまくいくんでしょうか。

A 回答 (3件)

> preg_match(/<div class=\"content\">.*<\/div>/s),$target);


> と書いて、divの中身を取り出すことはできたのですが、
> <div class="content">の対の</div>ではなく、html文中にある一番最後の</div>が対象になってしまいました。
* だと最長一致なので
代わりに最短一致の *? を使ってみてはどうでしょう。

(/<div class=\"content\">.*?<\/div>/s
    • good
    • 1
この回答へのお礼

ありがとうございました。

うまくいきました!!

お礼日時:2007/05/01 06:05

preg_* なら sオプションを追加してください。


mb_ereg*なら、パターンに埋め込み、かなあ。
"(?s)...."

この回答への補足

preg_matchを使っているんですが、sオプションは何を意味するんでしょうか?

マニュアルを見てもそれらしいものが見つからなかったんですが。

補足日時:2007/05/01 03:28
    • good
    • 1
この回答へのお礼

http://php.holywar.net/manual/ja/reference.pcre. …
すいません。書いてありました。


preg_match(/<div class=\"content\">.*<\/div>/s),$target);
と書いて、divの中身を取り出すことはできたのですが、
<div class="content">の対の</div>ではなく、html文中にある一番最後の</div>が対象になってしまいました。

1個目を指定などは可能でしょうか?

お礼日時:2007/05/01 04:06

最初に全行を取込んでから処理してみては?


取込む際に無駄な改行コードを削除してから
正規表現でデータを取り出してみてはいかがでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

\sで「空白文字(スペース、復帰文字、タブ、改行文字、ラインフィード)」みたいだったので下のように書いたのですが、
preg_replace("/\s/", '', $target);

<div class="content">が<divclass="content">のように、タグの中のスペースまで削除されてしまいました。

お礼日時:2007/05/01 04:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!