タグ: 住所 を抽出しています。
Total: 1

住所文字列の分解

ブログ | 2010/8/6 01:27
区切りのない住所文字列から、
都道府県と市区町村とその他に分けます。

<?php

$str = '石川県石川郡野々市町住吉町';
//$str = '長崎県北松浦郡鹿町町鹿町免';
//$str = '三重県四日市市高砂町';
//$str = '広島県廿日市市須賀';
//$str = '岩手県花巻市東和町落合1区';
//$str = '新潟県上越市中郷区江口';
//$str = '北海道旭川市四区三条四丁目';

preg_match('/^(北海道|青森県|岩手県|秋田県|山形県|宮城県|福島県|新潟県|栃木県|群馬県|茨城県|埼玉県|千葉県|東京都|神奈川県|山梨県|静岡県|長野県|富山県|石川県|福井県|岐阜県|愛知県|三重県|奈良県|和歌山県|滋賀県|京都府|大阪府|兵庫県|岡山県|広島県|鳥取県|島根県|山口県|香川県|徳島県|愛媛県|高知県|福岡県|佐賀県|長崎県|熊本県|大分県|宮崎県|鹿児島県|沖縄県)(北松浦郡鹿町町|.+?郡.+?町|.+?郡.+?村|宇陀市|奥州市|上越市|黒部市|豊川市|姫路市|.+?[^0-9一二三四五六七八九十]区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*)$/u',$str,$match);

$pref = !empty($match[1]) ? $match[1] : '';
$city = !empty($match[2]) ? $match[2] : '';
$town = !empty($match[3]) ? $match[3] : '';

?>

Yahoo!のAPIが区切りを入れてくれると嬉しいのだけれど...
▼追記 2010/8/28 05:47
townに区が入ると切れなかったので、少し修正。
まだ網羅はできてない気はします。
▼追記 2010/8/28 16:15
都道府県も省略して、これでいけるかな。
preg_match('/^(.+?[都道府県])(北松浦郡鹿町町|.+?郡.+?町|.+?郡.+?村|宇陀市|奥州市|上越市|黒部市|豊川市|姫路市|.+?[^0-9一二三四五六七八九十]区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*)$/u',$str,$match);

都・道・府・県の文字列の入る都道府県はないですよね?
▼追記 2010/8/28 16:23
もう少し短くできるか
preg_match('/^(.+?[都道府県])(北松浦郡鹿町町|.+?郡.+?[町村]|宇陀市|奥州市|上越市|黒部市|豊川市|姫路市|.+?[^0-9一二三四五六七八九十]区|四日市市|廿日市市|.+?[市町村])(.*)$/u',$str,$match);
▼追記 2010/8/29 18:23
京都府が失敗してたので追加。
preg_match('/^(京都府|.+?[都道府県])(北松浦郡鹿町町|.+?郡.+?[町村]|宇陀市|奥州市|上越市|黒部市|豊川市|姫路市|.+?[^0-9一二三四五六七八九十]区|四日市市|廿日市市|.+?[市町村])(.*)$/u',$str,$match);
▼追記 2010/8/31 12:21
一文字区がまずかったので、更に修正。
preg_match('/^(京都府|.+?[都道府県])(北松浦郡鹿町町|.+?郡.+?[町村]|宇陀市|奥州市|上越市|黒部市|豊川市|姫路市|.*?[^0-9一二三四五六七八九十]区|四日市市|廿日市市|.+?[市町村])(.*)$/u',$str,$match);
▼追記 2010/8/31 21:19
省略で失敗(「羽村市」にて)したので、少し長く戻しました。
preg_match('/^(京都府|.+?[都道府県])(北松浦郡鹿町町|.+?郡.+?町|.+?郡.+?村|宇陀市|奥州市|上越市|黒部市|豊川市|姫路市|.*?[^0-9一二三四五六七八九十]区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*)$/u',$str,$match);
▼追記 2010/9/1 00:42
フィードバックから、大和郡山市,杵島郡大町町,周南市 を追加。
preg_match('/^(京都府|.+?[都道府県])(大和郡山市|北松浦郡鹿町町|杵島郡大町町|.+?郡.+?町|.+?郡.+?村|宇陀市|奥州市|上越市|黒部市|豊川市|姫路市|周南市|.*?[^0-9一二三四五六七八九十]区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*)$/u',$str,$match);
▼追記 2010/9/1 01:28
フィードバックから、「区」コレクション
http://uub.jp/nam/ku.html

これで、イイ線いったんじゃなかろうか。
preg_match('/^(京都府|.+?[都道府県])(大和郡山市|北松浦郡鹿町町|杵島郡大町町|.+?郡.+?町|.+?郡.+?村|石狩市|伊達市|八戸市|盛岡市|奥州市|南相馬市|上越市|姫路市|宇陀市|黒部市|小諸市|富山市|岩国市|周南市|佐伯市|.*?[^0-9一二三四五六七八九十]区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*)$/u',$str,$match);
▼追記 2010/9/1 11:44
masaさん情報から、西海市を追加かな。
北松浦郡鹿町町は、佐世保市に合併とのことなので、いずれ消去。
▼追記 2010/9/1 22:54
これでどうじゃ!
preg_match('/^(京都府|.+?[都道府県])(大和郡山市|蒲郡市|小郡市|杵島郡大町町|.+?郡.+?町|.+?郡.+?村|石狩市|伊達市|八戸市|盛岡市|奥州市|南相馬市|上越市|姫路市|宇陀市|黒部市|小諸市|富山市|岩国市|周南市|佐伯市|西海市|.*?[^0-9一二三四五六七八九十上下]区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*)$/u',$str,$match);

穴を見つけた方には、2pt差し上げます。
▼追記 2010/9/1 23:11
こうしようかと思うのですが、ご意見募集中。
preg_match('/^(京都府|.+?[都道府県])(大和郡山市|蒲郡市|小郡市|杵島郡大町町|.+?郡.+?町|.+?郡.+?村|(大阪市|名古屋市|京都市|横浜市|神戸市|北九州市|札幌市|川崎市|福岡市|広島市|仙台市|千葉市|さいたま市).+?区|(千代田|中央|港|新宿|文京|台東|墨田|江東|品川|目黒|大田|世田谷|渋谷|中野|杉並|豊島|北|荒川|板橋|練馬|足立|葛飾|江戸川)区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*)$/u',$str,$match);

$pref = !empty($match[1]) ? $match[1] : '';
$city = !empty($match[2]) ? $match[2] : '';
$town = !empty($match[5]) ? $match[5] : '';
▼追記 2011/1/21 15:38
これのフィードバックやらねばだな。
今夜やろう。
▼追記 2011/2/8 23:24
現在のかたち(なぜか、ここからはjavascriptで)
var m = addr.match(/^(京都府|.+?[都道府県])(大和郡山市|蒲郡市|小郡市|杵島郡大町町|山口市|鹿児島市|鈴鹿市|.+?郡.+?町|.+?郡.+?村|石狩市|伊達市|八戸市|盛岡市|奥州市|南相馬市|上越市|姫路市|宇陀市|黒部市|小諸市|富山市|岩国市|周南市|佐伯市|西海市|.*?[^0-9一二三四五六七八九十上下]区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*?)([0-9-]*?)$/);
var a = {};
a.pref = m[1] || '';
a.city = m[2] || '';
a.town = m[3] || '';
a.numb = m[4] || '';
▼追記 2011/2/9 00:11
懲りずに。
var m = addr.match(/^(京都府|.+?[都道府県])(大和郡山市|蒲郡市|小郡市|杵島郡大町町|(?:[^市]*?|余市|高市)郡.+?[町村]|(?:石狩|伊達|八戸|盛岡|奥州|南相馬|上越|姫路|宇陀|黒部|小諸|富山|岩国|周南|佐伯|西海)市|.*?[^0-9一二三四五六七八九十上下]区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*?)([0-9-]*?)$/);
▼追記 2012/5/8 00:48
フィードバックいただいたので、追加。
var m = addr.match(/^(京都府|.+?[都道府県])(大和郡山市|蒲郡市|小郡市|郡上市|杵島郡大町町|佐波郡玉村町|(?:[^市]*?|余市|高市)郡.+?[町村]|(?:石狩|伊達|八戸|盛岡|奥州|南相馬|上越|姫路|宇陀|黒部|小諸|富山|岩国|周南|佐伯|西海)市|.*?[^0-9一二三四五六七八九十上下]区|四日市市|廿日市市|.+?市|.+?町|.+?村)(.*?)([0-9-]*?)$/);
前 | 1 | 次

Rottel内コンテンツ

ユーザー一覧

Rottelとは?
利用規約
開発飲料
利用者の声
ヘルプ
close