PHPの正規表現について次のプログラムを作成してください。

下記のような感じの文字列が複数行あるとします。

[[関東地方]](東京都)(新宿区)(1丁目)

このうち[[ ]]で囲まれてる部分、上記例では「関東地方」を値、
最初の()、上記例では「東京都」をキーとして、
全行を連想配列に格納するプログラムを作成してください。

環境はXP、PHP5です。
よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/09/13 03:04:33
  • 終了:2008/09/13 12:40:13

回答(2件)

id:ctrl-v No.1

ctrl-v回答回数289ベストアンサー獲得回数152008/09/13 04:03:51

ポイント35pt
<?php
$data = "data.txt";   //文字列データの入ったファイル
$lines = file($data);

foreach($lines as $str){
ereg("\[\[(.*)\]\]",$str,$val);  //[[ ]]の部分を読み込みます
ereg("((.*))((.*))((.*))",$str,$key);  //( )( )( )の部分を読み込みます
$result[$key[1]] = $val[1];/  /$key[1]には「東京都」、$key[2]には「新宿区」、$key[3]には「1丁目」が格納されます
}
?>

配列$resultに

array(2) {
  ["東京都"]=>
  string(12) "関東地方"
  ["神奈川県"]=>
  string(12) "関東地方"
}

という形でデータが格納されます。

http://q.hatena.ne.jp/answer

id:taroemon

ご回答ありがとうございます。

大変参考になりました。また教えてください。

2008/09/13 11:27:14
id:GoldenDawn No.2

GoldenDawn回答回数426ベストアンサー獲得回数812008/09/13 07:50:38

ポイント35pt
<?php
$str = '
[[関東地方]](東京都)(新宿区)(1丁目)
[[東北地方]](岩手県)(盛岡市)(2丁目)
[[北陸地方]](新潟県)(新潟市)(3丁目)
[[東海地方]](愛知県)(名古屋市)(4丁目)
[[甲信地方]](長野県)(長野市)(5丁目)
' ;

preg_match_all('/\[\[(.+?)\]\]\s*((.+?))/', $str, $mat) ;
$list = array_combine($mat[2], $mat[1]) ;

print_r($list) ;
?>

http://q.hatena.ne.jp

id:taroemon

ご回答ありがとうございます。

うまくいきました。大変勉強になりました。

2008/09/13 12:40:05

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません