- ベストアンサー
正規表現でHTML内の文字列を抜き出す方法
- PHPの正規表現を用いて外部Webページのソース内にある文字列を抜き出す方法をご教授ください。
- 質問者は特定のタグに挟まれた文字列を抜き出したいと考えていますが、現在のプログラムではうまくいかないとのことです。
- 正規表現によるマッチングの部分をどのように書くべきか、詳しい方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
仕様についてはもう少し詰めた方がよいかもしれませんが、 概ね以下のようにすればよいかと・・・ なおファイルI/Oについては紛らわしいので、今回は割愛しました <? $html=<<<eof <table border> <tbody> <tr> <td class="nml">111</td> <td class="nml">222<br />333</td> </tr> <tr> <td class="nml">444<br> 555</td> <td class="NG">666</td> </tr> </tbody> </table> eof; print $html; $html=str_replace(Array("<br>","<br />","\n","\r"),"",$html); $pattern="/<td class=\"nml\">(.*?)<\/td>/mis"; preg_match_all($pattern,$html,$matches); print "<pre>\n"; print_r($matches); print "</pre>\n"; ?>
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
>ソース内にある文字列を抜き出してきたい その条件が書いていないので回答のしようがありません classがnmlのtdに囲まれた文字列を欲しいのでしょうか?
補足
ご回答頂きありがとうございます。 説明不足で申し訳ありません。おっしゃるとおり、classがnmlでかつtdに囲まれた文字列を取得する方法をご教授頂けないでしょうか。また、そのtdタグ内に改行タグbrが存在した場合、そちらも取り除いた「文字列だけ」を出力した場合の方法も合わせてご教授頂けると幸いです。 宜しくお願い致します。
補足
ご回答頂きましてありがとうございます。 ご教授頂きましたプログラムを自分のプログラムに組み合わせましたが、確かに文字列がしっかりと表示されました。しかし、その文字列が文字化けして表示されてしまいます。 mb_http_output("SJIS"); ・・・(1) mb_convert_encoding("EUC-JP", "SJIS"); ・・・(2) 等、色々試みましたが文字化けが直らず、(1)を実行すると画面に何も表示されなくなってしまいます。 どうか、文字化けの解決方法がありましたら、重ねてご教授頂けないでしょうか。