PHPの正規表現あれこれ
CSVデータのパース(分割)
Perl + 正規表現で、CSVデータをパースしている情報があったので、PHPでもできのかな?とおもってやってみました。
//参考サイト:http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values
//処理対象のCSV定義
// 1. 基本的にコンマで区切った部分がスペースを含めて値である.
// 2. 値にコンマやダブルクウォートが含まれる場合は, 値全体をダブルクウォートで囲む.
// 3. 値に含まれるダブルクウォートは "" となる.
//※値の中に改行コードがあるデータは対象外です。
$str = '47201,"90101","9,010154","オキナワケン","ナハシ","アカミネ","沖縄県","那""覇市","赤嶺",0';
//処理を容易にするために末尾にカンマを付与します。
$str = preg_replace('/(?:\x0D\x0A|[\x0D\x0A])?$/',',', $str);
//パース
preg_match_all('/("[^"]*(?:""[^"]*)*"|[^,]*),/', $str, $match);
//"値"→値にトリミング
$result = preg_replace('/^"(.*)"$/','$1', $match[1]);
//$result = array_map(create_function('$ele', 'return trim($ele,"\"");'), $match[1]);
//値中の""を"に変換
$result = str_replace('""', '"', $result);
print_r($result);
//↓
//Array
//(
// [0] => 47201
// [1] => 90101
// [2] => 9,010154
// [3] => オキナワケン
// [4] => ナハシ
// [5] => アカミネ
// [6] => 沖縄県
// [7] => 那"覇市
// [8] => 赤嶺
// [9] => 0
//)
アップロードしたファイル
ファイルはアップロードされていません。









