人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5.3以上で「文字列の検索」とその後にある文字を調べるプログラムを書いていただけると助かります。

http://test01.1811way.com/test02.html
で、
「かきくけこ」という文字があったら、次にある
「男」もしくは「女」のどちらかの文字を表示する。
というプログラムを書いていただけると助かります。

1.「かきくけこ」という文字があったら
2.それ以降の文字を検索し
3.「男」という文字があれば「男」と表示
「女」という文字があれば「女」と表示
(ファイルの最後まで検索→表示)


という順番だと思います。

必要かどうかわかりませんが、
オブジェクト「simple_html_dom.php」を使っていただいて構いません。

よろしくお願いします。

●質問者: kohhi
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Cherenkov
●100ポイント

そのURL先をスクレイピングしたいという質問ですよね?
simple_html_domを使ったほうが簡単に抽象的な検索できるのでおすすめです。
サンプルを書きました。utf-8で保存してください。

  1. 文字コードを変換。
  2. 全てのtrを取ってきて2つ目のtdの中に「かきくけこ」を含む場合は4つ目のtdを表示する。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;
 }
}

kohhiさんのコメント
早速お返事いただきありがとうございました。

2 ● oil999
●150ポイント ベストアンサー

与えられた条件だと、下記のようになります。
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";
}
?>

kohhiさんのコメント
2パターン書いていただき、ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ