• ベストアンサー

特定の範囲間を取得する方法について

任意のウェブサイトから特定の範囲間を取得したいと思い、何らかの正規表現を用いれば出来るのではと思ったのですが、どのようにすればできるのか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、抽出したい範囲の例としては下記となります。 例1 <body> ※この中を抽出したいです。 </body> 例2 <!--抽出開始--> ※この中を抽出したいです。 <!--抽出終了--> 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

XMLをパースしたいならそれ用のパーサーを利用するのが早いです。 単純に文字列として抜き出したいなら正規表現でこんな感じ (ただしutf以外では正しく抜き出せない可能性が高いです) <?PHP $str=<<<eof 例1 <body> test1 ※この中を抽出したいです。 test2 </body> 例2 <!--抽出開始--> test3 ※この中を抽出したいです。 test4 <!--抽出終了--> eof; $pattern1="/(?<=<body>).*?(?=<\/body>)/misu"; if(preg_match($pattern1,$str,$match)) print "結果1:<br>".nl2br(htmlspecialchars($match[0])); $pattern1="/(?<=<!--抽出開始-->).*?(?=<!--抽出終了-->)/misu"; if(preg_match($pattern1,$str,$match)) print "結果2:<br>".nl2br(htmlspecialchars($match[0])); ?>

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたソースを試したところ、意図した動作となりました。 それと、行いたい事はyambejpさんが下記の質問でご回答された内容と似たような感じだったため、リンク先のソースと今回ご教示いただいたソースから、下記のソースを基にカスタマイズすればやりたい事が出来ると思います。 http://oshiete.goo.ne.jp/qa/3636057.html なお、読み込みたいhtmlは自分が作成したもので、文字コードはUTF-8の為、UTFで動作すれば大丈夫です。 <?php ob_start(); include 'http://www.example.com/index.html'; $hoge=ob_get_contents(); ob_end_clean(); $pattern1="/(?<=<body>).*?(?=<\/body>)/misu"; if(preg_match($pattern1,$hoge,$match)) print "結果1:<br>".nl2br(htmlspecialchars($match[0])); ?> このたびはどうもありがとうございました。 以上、よろしくお願いします。

関連するQ&A