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行ループしているために意味がない状態になるのでしょうか。
どのようにすれば取得させることができるのでしょうか。
お手数をおかけしますが何卒よろしくお願い致します。
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; }
ありがとうございます。
全容がないのでわからないですよね;
結局はできなかったのですが、ご教授いただいた部分をヒントにして
色々試行錯誤してみます。
ご多忙な中、ご回答ありがとうございました
No.5
- 回答日時:
HTMLから様々な情報を抜き出しているようなので、手頃なHTML Parserを利用する。
PHP Simple HTML DOM Parser等?
http://sourceforge.net/projects/simplehtmldom/
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";
}
}
?>
この回答への補足
ご回答ありがとうございますm(__)m
説明不足で大変申し訳ありません。
<span class="a"></span>に限らず、他の要素抜き出しにも活用しているため、
(<img src="(.*?)">など)
ご教授いただきました方法では難しいのが現状ですm(__)m
その都度、その都度で対応できる形でありますと助かります。
申し訳ありません。
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);
?>
この回答への補足
ご回答ありがとうございます。
ご教授いただいたとおりにやってみたのですが
printにArray()と表示されるだけで
抜き出して表示されませんでした。
私のやり方が悪いのでしょうか・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
- JavaScript htmlとcssで分数を表示後、分数の右側に文書を書きたい 1 2022/04/28 10:09
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- HTML・CSS 分数が正常に表示されない。 6 2022/05/09 18:53
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現でシングルクォーテー...
-
VBAを使ってHTMLソースから特定...
-
正規表現で自動リンク後、長いU...
-
正規表現での英字+ハイフンの...
-
正規表現 許可文字列 かつ ...
-
PHPの正規表現で住所を分けるに...
-
正規表現 画像リンクのaltの取得
-
preg_matrchとpreg_replace
-
掲示板へのいたずら書き込み防止
-
VBAのコマンドボタンの文字列の...
-
delphi でのコード上でTab を入...
-
reuterの記事をbeautiful.soup....
-
全角英数文字が嫌われる理由を...
-
セッションが文字化け、エンコ...
-
nl2brを使用すると<br />が挿入...
-
SJIS→UTF-8変換後の文字化けに...
-
半角記号、全角記号を含む正規...
-
VC++のボタン
-
数値をASCII文字にする方法につ...
-
C# DataGridViewのセルを改行禁...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
preg_matchでエラーが出ます。
-
VBAを使ってHTMLソースから特定...
-
Excelで数字のみを2倍3倍にする...
-
PHPで変数から1行目だけを取得...
-
正規表現でシングルクォーテー...
-
、"(ダブルクォーテーション)...
-
正規表現で「0」のみ抽出
-
住所から特定の文字列、数値を...
-
PHPで あるフォルダ内の、特定...
-
phpでhtmlソースを解析し、文字...
-
PHPで<a>タグ内からURLと文字を...
-
正規表現で特定のHTMLタグのク...
-
PHPの正規表現で住所を分けるに...
-
Smartyを使用した、テンプレー...
-
PHPによるIPアドレスマッチ
-
正規表現で、半角大文字と半角...
-
php 正規表現で(ただし○○は除...
-
PHPメールフォーム URLと半角...
-
「半角数字」と「+」を許可する...
-
preg_matchでのマッチが正しく...
おすすめ情報