• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpでhtmlソースを解析し、文字を抜き出したいのですが、上手くきま)

PHPでHTMLソースを解析し、文字を抜き出す方法

このQ&Aのポイント
  • PHPを使用してHTMLソースを解析し、特定の文字列を抜き出す方法について教えてください。
  • HTMLソースから特定の要素を取得する際に、改行が含まれる場合の対処方法を教えてください。
  • preg_match関数のmsオプションについて詳しく教えてください。

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

  • ベストアンサー
  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.4

結果の用途がわからないので適切な回答かどうか、ですが次のようなのではどうですか。 $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; }

bou1025
質問者

お礼

ありがとうございます。 全容がないのでわからないですよね; 結局はできなかったのですが、ご教授いただいた部分をヒントにして 色々試行錯誤してみます。 ご多忙な中、ご回答ありがとうございました

その他の回答 (4)

回答No.5

HTMLから様々な情報を抜き出しているようなので、手頃なHTML Parserを利用する。 PHP Simple HTML DOM Parser等? http://sourceforge.net/projects/simplehtmldom/

  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.3

こんな感じでいかがでしょうか。 <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"; } } ?>

bou1025
質問者

補足

ご回答ありがとうございますm(__)m 説明不足で大変申し訳ありません。 <span class="a"></span>に限らず、他の要素抜き出しにも活用しているため、 (<img src="(.*?)">など) ご教授いただきました方法では難しいのが現状ですm(__)m その都度、その都度で対応できる形でありますと助かります。 申し訳ありません。

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.2

preg_matchを行う前に、改行を削除すればいいのでは?

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

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); ?>

bou1025
質問者

補足

ご回答ありがとうございます。 ご教授いただいたとおりにやってみたのですが printにArray()と表示されるだけで 抜き出して表示されませんでした。 私のやり方が悪いのでしょうか・・・。

関連するQ&A