お世話になります。
今回PHPでデータを編集するときに正規表現でお聞きしたいところがございます。
例として以下のようなテキストがあります。
05start
いちご
バナナ
うめ
もも
05finish
12start
ごはん
おそば
12finish
15start
わかめ
ひじき
めかぶ
15finish
18start
コーヒー
ココア
18finish
上記のようなテキストファイルがあり
「2桁の数字+start」から「2桁の数字+finish」までの間にあるデータを連想配列に入れたいと思っているのですが(この場合、startと
finishのとなりに付属する2桁の数字は同じ数字とします)
どのようにコードを書けば良いがわかりません。
取得しようとするデータの外側にある、2桁の数字を連想配列のキーとします。
希望する連想配列内のデータは以下のような感じです。
連想配列「data」
05 => いちご バナナ うめ もも
12 => ごはん おそば
15 => わかめ ひじき めかぶ
18 => コーヒー ココア
正規表現以外でも参考になるコードの書き方などがございましたら
是非ご教授いただけましたら幸いです。
よろしくお願い致します。
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); ?>