dポイントプレゼントキャンペーン実施中!

phpでhtmlソースを解析し、文字を抜き出したいのですが、上手くきません。

<span class="a">あ</span>
<span class="b">い</span>

<span class="a">う</span>
<span class="b">え</span>

<span class="a">お</span>
<span class="b">か</span>

このようなソースから「あいうえお」の部分だけを抜き出したいのです。

以下のようにしているのですが、改行が無い場合は上手く取得できるのですが、
以下のような形で途中に改行が入っている場合、上手く取得できません。

<span class="a">あ
</span>

このような場合でも取得できるようにするにはどうすればよいでしょうか。

$lines = file("http://~~");

foreach ($lines as $line) {

preg_match('/<span class="a">(.*?)<\/span>/ms', $line, $match);

preg_match('/<span class="b">(.*?)<\/span>/ms', $line, $match);

}

msをつけておりますが、
この場合は1行1行ループしているために意味がない状態になるのでしょうか。

どのようにすれば取得させることができるのでしょうか。
お手数をおかけしますが何卒よろしくお願い致します。

A 回答 (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; }
    • good
    • 1
この回答へのお礼

ありがとうございます。

全容がないのでわからないですよね;

結局はできなかったのですが、ご教授いただいた部分をヒントにして
色々試行錯誤してみます。

ご多忙な中、ご回答ありがとうございました

お礼日時:2010/08/22 03:54

HTMLから様々な情報を抜き出しているようなので、手頃なHTML Parserを利用する。


PHP Simple HTML DOM Parser等?
http://sourceforge.net/projects/simplehtmldom/
    • good
    • 0

こんな感じでいかがでしょうか。



<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

その都度、その都度で対応できる形でありますと助かります。

申し訳ありません。

補足日時:2010/08/21 03:52
    • good
    • 0

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

    • good
    • 0

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()と表示されるだけで
抜き出して表示されませんでした。

私のやり方が悪いのでしょうか・・・。

補足日時:2010/08/21 03:55
    • good
    • 0

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