任意のウェブサイトから特定の範囲間を取得したいと思い、何らかの正規表現を用いれば出来るのではと思ったのですが、どのようにすればできるのか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。

なお、抽出したい範囲の例としては下記となります。

例1
<body>
※この中を抽出したいです。
</body>

例2
<!--抽出開始-->
※この中を抽出したいです。
<!--抽出終了-->

以上、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

XMLをパースしたいならそれ用のパーサーを利用するのが早いです。


単純に文字列として抜き出したいなら正規表現でこんな感じ
(ただしutf以外では正しく抜き出せない可能性が高いです)

<?PHP
$str=<<<eof
例1
<body>
test1
※この中を抽出したいです。
test2
</body>

例2
<!--抽出開始-->
test3
※この中を抽出したいです。
test4
<!--抽出終了-->
eof;


$pattern1="/(?<=<body>).*?(?=<\/body>)/misu";
if(preg_match($pattern1,$str,$match)) print "結果1:<br>".nl2br(htmlspecialchars($match[0]));

$pattern1="/(?<=<!--抽出開始-->).*?(?=<!--抽出終了-->)/misu";
if(preg_match($pattern1,$str,$match)) print "結果2:<br>".nl2br(htmlspecialchars($match[0]));

?>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご教示いただいたソースを試したところ、意図した動作となりました。

それと、行いたい事はyambejpさんが下記の質問でご回答された内容と似たような感じだったため、リンク先のソースと今回ご教示いただいたソースから、下記のソースを基にカスタマイズすればやりたい事が出来ると思います。
http://oshiete.goo.ne.jp/qa/3636057.html

なお、読み込みたいhtmlは自分が作成したもので、文字コードはUTF-8の為、UTFで動作すれば大丈夫です。

<?php
ob_start();
include 'http://www.example.com/index.html';
$hoge=ob_get_contents();
ob_end_clean();

$pattern1="/(?<=<body>).*?(?=<\/body>)/misu";
if(preg_match($pattern1,$hoge,$match)) print "結果1:<br>".nl2br(htmlspecialchars($match[0]));
?>

このたびはどうもありがとうございました。
以上、よろしくお願いします。

お礼日時:2011/04/25 11:59

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q世界史の西アジアの範囲

世界史の西アジアの範囲ってオリエントとイスラームのことですか?

Aベストアンサー

トルコとギリシャのボスポラス海峡を境にして、オリエントが始まります。
オリエント(日の出処)・オチデント(日の没処=西洋)はローマ時代からある分け方で、まだイスラム教(キリスト教も)は生まれていません。人種的・文化的な違いによりギリシャ・ローマ人を初めとする西洋人から見た分け方です。
その時代には、まだ西欧人にはアジアはありませんでした。

中世になると、イスラムとキリストの宗教戦争が激化します。西洋人はやはりボスポラス海峡より手前側は自分たちの地域だと意識しており、このときオリエント=イスラムになっていきました。この時代にはオリエント(イスラム)の先にアジアがあり、胡椒や絹などが生産されていることが知られてきました。

さらに大航海時代が始まります。大航海はもともとイスラムの地域を通らずに、アジアに行ければ貿易で儲けることができると考えられて始まりました。
この時代、イスラムとアジアは同一ではなく、またアジアもインド・タイ・インドネシアあたりまでの地域を指しました。

さらに植民地帝国主義の時代を迎えます。イスラムもアジアも帝国の支配下に置かれ、さらには中国・日本・朝鮮まで、西洋諸国は迫ってきました。
この時代の意識として、もともとのオチデント=西洋、以外はすべて植民地といってもいい状態になりました。
そこで植民地の地域としてアフリカ・オリエントと分け方ができたのです。
しかし、オリエントというのは西洋人とって憧れの響き(日本人の「欧米か!」と同じ)がありますので、自分たちより格下の植民地を現すの不適当であり、また当時の最大の帝国、イギリスの植民地がインドにあったことから、アジア=植民地=西洋でないところ(ボスポラス以東)を現すようになりました。またオリエント=東側ということからイースト(東)という言い方もあります。
この呼び方により、現トルコから
ミドルイースト(中近東)
イースト(インドなどのアジア、西アジア)
ファーイースト(遠いアジア、日本を含む東アジア)
と呼ぶ言い方もありますが、すべて西洋人からみればアジアです。

あくまでも西洋からみた分け方ですので、日本人の感覚では中近東とインドと日本・中国がアジアでくくられるのは違和感があります。
そこで、西アジア・東アジアという言い方が出てきたのです。
東アジアは、漢字文化圏と重なります。(中国・朝鮮・日本・ベトナムなど)
西アジアは、基本的にタイ・インドネシアあたりからインドまでですが、ここはイスラム圏を多く含みますので、西洋(ウエスト)と対比する場合は、中近東まで含め
ウエスト=キリスト教(欧米):イースト=イスラム教(中近東と西アジア)
とすることも有ります。
この場合は、厳密な地理よりも、宗教的な対比になりますので、西洋にアメリカを含めることに注意してください。
このとき東アジアは、イスラムでもキリストでもない地域となります。

世界史はすべて欧米人の視点で書かれていますので、日本人の感覚からすれば不思議に見え、また地域が一定になりません。基本的に西洋でなければアジア(アフリカを除く)で、その中にイスラム文化とそうでない文化があるので、西アジア・東アジアと分けるのです。

トルコとギリシャのボスポラス海峡を境にして、オリエントが始まります。
オリエント(日の出処)・オチデント(日の没処=西洋)はローマ時代からある分け方で、まだイスラム教(キリスト教も)は生まれていません。人種的・文化的な違いによりギリシャ・ローマ人を初めとする西洋人から見た分け方です。
その時代には、まだ西欧人にはアジアはありませんでした。

中世になると、イスラムとキリストの宗教戦争が激化します。西洋人はやはりボスポラス海峡より手前側は自分たちの地域だと意識しており、この...続きを読む

Q特定の文字から特定の文字までの間の特定の文字だけを削除するには・・

よろしくお願いいたします。

たとえば

"あいうえお,かきくけこ,さしすせそ",たちつてと,なにぬねの,はひふへほ

という文字列があった場合、

「"」から「"」までの「,」のみ(この場合「あ」から「そ」までの間)を削除して、それ以外の範囲の「,」はそのままにして表示することは可能ですか?

つまり、上記の文字列を

"あいうえおかきくけこさしすせそ",たちつてと,なにぬねの,はひふへほ

にしたいんです。

可能な場合、どういうphpを書けばいいのでしょうか?

どうかご教授ください。

Aベストアンサー

こんなんでどうでしょ?

<?
function hoge($a){
return str_replace(",","",$a);
}
$str='abc,"def,ghi,jkl",mno,"pqr,stu",vwx,yz';
$pattern='/".*?"/e';
$replacement="hoge(\"$0\")";
$str=preg_replace($pattern,$replacement,$str);
print $str;
?>

Q東南アジアはよく聞くけど北アジアって聞かないのはなぜ

ニュースなどでよく中央アジアや東アジアや東南アジアは聞くのですが、
北アジア、西アジア、南アジアなどはまったく聞きません。
これはどうしてなのでしょうか?
また東アジアとは具体的にどの範囲なのでしょうか?
日本は含まれるのでしょうか?中国は?ロシアは?
よろしくお願いします。

Aベストアンサー

北はロシアしかないです。
朝鮮半島、ロシア極東部、中国東北部、日本のことを
北東アジアと言うことはありますが。
東アジアは日韓中(台湾香港を含む)。
南アジアはインド、スリランカ、モルジブのことを言います。
これにバングラデシュ、パキスタン、アフガニスタン、
ネパール、ブータンを加えることがあります。
西アジアは一般的には中近東と呼ばれていますね。
日本では西南アジア、アジア南西部という言い方をする
ことのほうが多いと思います。
こういうことはGoogleやウィキペディアで調べるとヒントがいっぱい見つかりますよ。

Qウェブサイトのスクリーンショットを取得する方法

Alexa Web Search - Top 500
http://www.alexa.com/site/ds/top_sites?ts_mode=lang&lang=ja
の様に、ウェブサイトのスクリーンショットをサムネイルとして利用したいのですが、PHPには関数などが既に用意されているのでしょうか?(スクリーンショットに関する情報が全く見つかりませんでした…)
スクリーンショットを撮る方法や、その方法を解説したサイトがありましたら教えてください。

Aベストアンサー

phpの関数で一発でというのは無かったと思います。

参考URL:http://ns1.php.gr.jp/pipermail/php-users/2004-January/thread.html#20271

Q北の核兵器の被爆範囲

 北朝鮮が核ミサイルを作り、外交カードとして利用できるようになったとしても、東アジアの中で有効なのでしょうか?チェルノブイリからの放射性物質はヨーロッパやアジアにかけて広い範囲に降り注いだと聞きました。ならば、例えば朝鮮半島から日本列島に撃った場合半島も被爆範囲となり、北も撃つわけにいかないと思います。それとも、ミサイルの核弾頭の場合被爆範囲は都市一つ程度で収まるものなのでしょうか?

Aベストアンサー

http://www004.upp.so-net.ne.jp/weapon/nuclear.htm
核兵器の威力と言っても、様々な効果があります。
まず一番最初に影響を及ぼすのは爆風による被害です。
この爆風による被害は一定の範囲しか及ぼしません。
続いて放射線や放射能、これもある一定の距離までしか及ぼしません。

チェルノブリイの時の放射線被曝の時は核爆発でないです。
純粋に放射能が漏れたので被害が広がったのです。
核爆発の場合には、核燃料の殆どがエネルギーに変わっているので放射能自体は放射能漏れよりも少ないです。
もちろん、チェルノブリイの時の被害でヨーロッパやアジアにかけて広い範囲に影響を及ぼしたのは事実です。
でも、被害はどうだったのでしょうか?
ガンによる死亡率が10倍から20倍に跳ね上がったというニュースが出たでしょうか?
核をおそれることは正しいことです。
でも、あまり心配しすぎるのも北朝鮮の戦略にはめられる危険性があります。
敢えて、黙視しているだけかもしれないですがミサイルを撃ち込むだけの能力があると言うことは別の何かを撃ち込めると言うことです。
その別の何かとは貧者の核爆弾と言われているものです。
サンプルさえあれば、誰でも簡単に培養できてお手軽にばらまくことの出来る細菌兵器。
例えば、炭疽菌や天然痘などです。
これらは、日本国内において絶滅しています。
でも、これらを作為的にばらまかれるとワクチンの手配が間に合うのか?
大きく広がって自分の国に蔓延してもワクチンさえあれば被害が及ばないので核兵器よりも使い勝手がよいです。

http://www004.upp.so-net.ne.jp/weapon/nuclear.htm
核兵器の威力と言っても、様々な効果があります。
まず一番最初に影響を及ぼすのは爆風による被害です。
この爆風による被害は一定の範囲しか及ぼしません。
続いて放射線や放射能、これもある一定の距離までしか及ぼしません。

チェルノブリイの時の放射線被曝の時は核爆発でないです。
純粋に放射能が漏れたので被害が広がったのです。
核爆発の場合には、核燃料の殆どがエネルギーに変わっているので放射能自体は放射能漏れよりも少ないです。
も...続きを読む

Qウェブ情報を取得して、取得したデータを加工

お世話になります。担当者突然の退社のため、
業務が進まず困っております。
先達の皆様のお知恵を拝借させてください。

概要:
ウェブ情報を取得して、ウェブに掲載されている、
キーワードを変数化したい

環境:
php:php5
os:WindowsXP
DB:postgresql8
Apache:2.0.55



////////////////////////////////////////////
//処理内容
////////////////////////////////////////////
//検索語句をCSVから抜き出し、変数化
$word='検索語句';

//ウェブアドレスを変数に格納
$url='http://www.hogehogehogehoge.com/'.$word;

//URLを開く
$file = fopen('$url','r') or die('Cannot open URL');

//ここから読み取ったデータの中に記載されたキーワードを変数に・・・
////////////////////////////////////////////

開いたURLを変数に格納するところまでは、
よいのですが、その後の処理がわからず悩んでおります。
ウェブデータ中のキーワードをどうやって変数扱いにするのか?

例えば、取得ページで雑貨Aの単価が100円、雑貨Bが3000円だとした場合に、
-------------------
雑貨A    \100     (←ブラウザ上での記載)
雑貨b    \3000
------------------
この4つのデータを
$zakka_a="ブラウザ表記の文字列「雑貨A」";
$zakka_b="ブラウザ表記の文字列「雑貨B」";
$nedan_a=100";
$nedan_b=3000;

と変数扱いにしたいのですが、
$file変数からこの4つのキーワードを抜き出す処理
がわかりません。

方法がわかる方お教えくだされば大変助かります。
また、そんな処理しなくてもこっちの方が簡単だよ!
という意見もお待ちしております。
皆様お忙しいとは存じますが、どうぞ助けて下さいm(_ _)m

お世話になります。担当者突然の退社のため、
業務が進まず困っております。
先達の皆様のお知恵を拝借させてください。

概要:
ウェブ情報を取得して、ウェブに掲載されている、
キーワードを変数化したい

環境:
php:php5
os:WindowsXP
DB:postgresql8
Apache:2.0.55



////////////////////////////////////////////
//処理内容
////////////////////////////////////////////
//検索語句をCSVから抜き出し、変数化
$word='検索語句';

//ウェブアドレスを変数に格納
$url='http://ww...続きを読む

Aベストアンサー

Perlでは、HTML::TableExtractというモジュールを利用していましたが
PHPでやるには、どうしたらいいだろうと探してみたらありました。

使用方法ドキュメント:
http://reallyshiny.com/guides/table-extractor.pdf
ソース:
http://reallyshiny.com/scripts/table-extractor.txt

Q小アジアの場所が検索できなくて、、

すみません、なるべく自分で検索するように
しているのですが、

「小アジア」の場所が検索できません。
小アジアの場所の範囲が記されているページの
URLを教えてください。

よろしくお願いします。

Aベストアンサー

小アジアはトルコ(アナトリア地方)ですから参考サイトが良くわかると思います。

加工サンプル と書いてある所をクリックすると地図が出ます。


http://anadolu.areastudy.net/link.html#area

参考URL:http://anadolu.areastudy.net/dagit.html

Q正規表現で複数行に渡る範囲を取り出す

<html>

<div></div>

<div class="content">
<b>内容<b/><br />
<img src="#" />
<p>ほげほげほげほげ</p>
</div>

<div></div>

</html>

上のようなHTMLがあるとします。<div>の前後にもhtmlは書かれています。
そこから正規表現で<div class="content">~~~</div>の中身を取り出したいのですが、できません。
言語はPHPで、

/<div class=\"content\">.*<\/div>/
と書いてみたんですが、改行などがありうまくいきませんでした。

どのようにに記述すればうまくいくんでしょうか。

Aベストアンサー

> preg_match(/<div class=\"content\">.*<\/div>/s),$target);
> と書いて、divの中身を取り出すことはできたのですが、
> <div class="content">の対の</div>ではなく、html文中にある一番最後の</div>が対象になってしまいました。
* だと最長一致なので
代わりに最短一致の *? を使ってみてはどうでしょう。

(/<div class=\"content\">.*?<\/div>/s

Qマイレージでの「アジア」ってどこまで?

地理に疎いので質問させて下さい。
ユナイテッドとノースウェストのマイレージがたまって各HPを
調べると日本ーアジアのエコノミー航空券が今のマイルで貰えそう
です。
HPにはアジアのどの範囲かという記載はありませんでした。
この「アジア」というのはどこまでを指しているのでしょうか?
中国・香港・韓国・台北以外はどこまで入るのかわかりません。
タイやインドネシア・マレーシア・ベトナム・フィリピンなどは
入らないのでしょうか?
詳しい方がいらっしゃいましたら教えていただけませんか?

Aベストアンサー

こちらこそ勝手に何度も回答してしまいましたが、お礼をお待ちすればよかったですね。

 >この例に無いアジアはどうなるのかが知りたいと思っています。
残念ながらこの例にない国(マレーシア、インドネシアなど)にはユナイテッド航空は就航していないということになります。

Q任意の回数出現する正規表現について

PHP Version 5.3.1
を使用しています。

次のような2パターンの文字列が与えられた場合に、

fetchAllWithUser ← Userを取得したい
fetchAllWithBlogAndCommentAndImg ← BlogとCommentとImgを取得したい

fetchAllWithの後の任意の文字列(Andは除く)を1つの正規表現の記述で取得したいのですが、
どのような正規表現にすれば良いのでしょうか?

Aベストアンサー

正規表現にする必然性がないのでは?

$arr = array();
if (substr($str, 0, 12) === 'fetchAllWith') { $arr = explode('And', substr($str, 12)); }


人気Q&Aランキング

おすすめ情報