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

PHPの正規表現でのデータ取得について

お世話になります。
今回PHPでデータを編集するときに正規表現でお聞きしたいところがございます。

例として以下のようなテキストがあります。

05start
いちご
バナナ
うめ
もも
05finish
12start
ごはん
おそば
12finish
15start
わかめ
ひじき
めかぶ
15finish
18start
コーヒー
ココア
18finish

上記のようなテキストファイルがあり
「2桁の数字+start」から「2桁の数字+finish」までの間にあるデータを連想配列に入れたいと思っているのですが(この場合、startと
finishのとなりに付属する2桁の数字は同じ数字とします)
どのようにコードを書けば良いがわかりません。

取得しようとするデータの外側にある、2桁の数字を連想配列のキーとします。
希望する連想配列内のデータは以下のような感じです。

連想配列「data」
05 => いちご バナナ うめ もも
12 => ごはん おそば
15 => わかめ ひじき めかぶ
18 => コーヒー ココア

正規表現以外でも参考になるコードの書き方などがございましたら
是非ご教授いただけましたら幸いです。
よろしくお願い致します。

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

▽最新の回答へ

1 ● siachan
ベストアンサー

phpは使ったことがないので書き方がおかしいかも知れませんが、こんなんでどうでしょう。
(気になる部分があったので少し修正)

http://ideone.com/5n4M54

<?php
$str = <<<EOS
05start
いちご
バナナ
うめ
もも
05finish
12start
ごはん
おそば
12finish
15start
わかめ
ひじき
めかぶ
15finish
18start
コーヒー
ココア
18finish
EOS;

$str = str_replace(array("\r\n", "\r"), "\n", $str);

preg_match_all('/^(\d{2})start\n([\S\s]*)\n\1finish$/m',$str,$matches);

$data = array();

for($i = 0; $i < count($matches[1]); $i++) {
 $key = $matches[1][$i];
 $value = str_replace("\n", ' ', $matches[2][$i]);
 $data[$key] = $value;
}
print_r($data);
?>

nagato-yukiさんのコメント
ご回答ありがとうございました! またサンプルのご提示も誠にありがとうございました。 こちらの回答で希望のとおりにデータ収集ができました。 また、機会がございましたらよろしくお願い致します。
関連質問

●質問をもっと探す●



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