http://test01.1811way.com/test02.html
で、
「かきくけこ」という文字があったら、次にある
「男」もしくは「女」のどちらかの文字を表示する。
というプログラムを書いていただけると助かります。
1.「かきくけこ」という文字があったら
2.それ以降の文字を検索し
3.「男」という文字があれば「男」と表示
「女」という文字があれば「女」と表示
(ファイルの最後まで検索→表示)
という順番だと思います。
必要かどうかわかりませんが、
オブジェクト「simple_html_dom.php」を使っていただいて構いません。
よろしくお願いします。
与えられた条件だと、下記のようになります。
UTF-8で保存し、実行してください。
URLのコンテンツのエンコードをmb_convert_encodingで自動変換していますが、うまく変換できない場合には、autoをコンテンツのエンコードに合わせてください。
<?php $url = 'http://test01.1811way.com/test02.html'; $str = file_get_contents($url); $str = mb_convert_encoding($str, 'utf-8', 'auto'); //検索 preg_match_all("/(かきくけこ).*?([男女])/umsi", $str, $arr, PREG_SET_ORDER); //結果表示 foreach ($arr as $items) { echo "{$items[1]} => {$items[2]}<br />\n"; } ?>
ただし、これだと "かきくけこ区" の次の行に登場する "男" にもマッチしてしまいます。これでも良いでしょうか?
もし良くない場合は、"" がデータ区切りになっているという前提で書き換えたものが以下のスクリプトになります。
<?php $url = 'http://test01.1811way.com/test02.html'; $str = file_get_contents($url); $str = mb_convert_encoding($str, 'utf-8', 'auto'); //検索 preg_match_all("/(かきくけこ).*?([男女]).*?<\/tr>/umsi", $str, $arr, PREG_SET_ORDER); //結果表示 //var_dump($arr); foreach ($arr as $items) { echo "{$items[1]} => {$items[2]}<br />\n"; } ?>
そのURL先をスクレイピングしたいという質問ですよね?
simple_html_domを使ったほうが簡単に抽象的な検索できるのでおすすめです。
サンプルを書きました。utf-8で保存してください。
<?php require_once 'simple_html_dom.php'; mb_language("Japanese"); header('Content-Type:text/html; charset=UTF-8'); $url = 'http://test01.1811way.com/test02.html'; $sorce = file_get_html($url); //今回のターゲットはshift_jisなので文字コード変換。 $sorce = mb_convert_encoding($sorce, 'UTF-8', 'auto'); $dom = str_get_html($sorce); foreach($dom->find('tr') as $element) { if (preg_match('/かきくけこ/u', $element->childNodes(1)->plaintext)) { echo $element->childNodes(3)->plaintext; } }
早速お返事いただきありがとうございました。
与えられた条件だと、下記のようになります。
UTF-8で保存し、実行してください。
URLのコンテンツのエンコードをmb_convert_encodingで自動変換していますが、うまく変換できない場合には、autoをコンテンツのエンコードに合わせてください。
<?php $url = 'http://test01.1811way.com/test02.html'; $str = file_get_contents($url); $str = mb_convert_encoding($str, 'utf-8', 'auto'); //検索 preg_match_all("/(かきくけこ).*?([男女])/umsi", $str, $arr, PREG_SET_ORDER); //結果表示 foreach ($arr as $items) { echo "{$items[1]} => {$items[2]}<br />\n"; } ?>
ただし、これだと "かきくけこ区" の次の行に登場する "男" にもマッチしてしまいます。これでも良いでしょうか?
もし良くない場合は、"" がデータ区切りになっているという前提で書き換えたものが以下のスクリプトになります。
<?php $url = 'http://test01.1811way.com/test02.html'; $str = file_get_contents($url); $str = mb_convert_encoding($str, 'utf-8', 'auto'); //検索 preg_match_all("/(かきくけこ).*?([男女]).*?<\/tr>/umsi", $str, $arr, PREG_SET_ORDER); //結果表示 //var_dump($arr); foreach ($arr as $items) { echo "{$items[1]} => {$items[2]}<br />\n"; } ?>
2パターン書いていただき、ありがとうございました。
2パターン書いていただき、ありがとうございました。
2013/01/05 17:59:34