- ベストアンサー
PHPでHTMLソースを解析し、文字を抜き出す方法
- PHPを使用してHTMLソースを解析し、特定の文字列を抜き出す方法について教えてください。
- HTMLソースから特定の要素を取得する際に、改行が含まれる場合の対処方法を教えてください。
- preg_match関数のmsオプションについて詳しく教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
結果の用途がわからないので適切な回答かどうか、ですが次のようなのではどうですか。 $content=file_get_contents("xxx.htnl"); $content=preg_replace("/<span[^>]*>|<\/span>|[\r\n]/","",$content); print $content; または、 $content=preg_match_all("/<span[^>]*>[\r\n]*(.+)[\r\n]*<\/span>/",$content,$match); foreach($match[1] as $str){ print $str; }
その他の回答 (4)
- nekomikekamo
- ベストアンサー率73% (71/97)
HTMLから様々な情報を抜き出しているようなので、手頃なHTML Parserを利用する。 PHP Simple HTML DOM Parser等? http://sourceforge.net/projects/simplehtmldom/
- kuzumiHK
- ベストアンサー率72% (132/183)
こんな感じでいかがでしょうか。 <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <?php $contents = file_get_contents("test.html"); // 改行とタブを削除 $contents = preg_replace("/\n|\r|\t/s", "", $contents); // spanの閉じタグで配列を生成 $content = explode("</span>", $contents); // 配列をループ foreach ($content as $text){ if(preg_match("/<span/i", $text)){ // テキストに<spanが含まれていたら処理 // spanタグの中身だけを抽出 $text = preg_replace("/^.*?<span.*?>(.*?)/", "$1", $text); print "<P>{$text}</P>\n"; } } ?>
補足
ご回答ありがとうございますm(__)m 説明不足で大変申し訳ありません。 <span class="a"></span>に限らず、他の要素抜き出しにも活用しているため、 (<img src="(.*?)">など) ご教授いただきました方法では難しいのが現状ですm(__)m その都度、その都度で対応できる形でありますと助かります。 申し訳ありません。
- memphis
- ベストアンサー率40% (975/2395)
preg_matchを行う前に、改行を削除すればいいのでは?
- yambejp
- ベストアンサー率51% (3827/7415)
file()ではなくfile_get_contents()で処理してみてください <?php $fname='http://exampe.com/hoge.htm'; $line =file_get_contents($fname); $pattern='/<span class="[ab]">(.*?)<\/span>/mis'; preg_match_all($pattern, $line, $match); print_r($match); ?>
補足
ご回答ありがとうございます。 ご教授いただいたとおりにやってみたのですが printにArray()と表示されるだけで 抜き出して表示されませんでした。 私のやり方が悪いのでしょうか・・・。
お礼
ありがとうございます。 全容がないのでわからないですよね; 結局はできなかったのですが、ご教授いただいた部分をヒントにして 色々試行錯誤してみます。 ご多忙な中、ご回答ありがとうございました