• ベストアンサー

PHPの正規表現で住所を分けるには?

住所を郡市町村までと、それ以降に分けたいと考えています。 preg_match('/(.*)(郡|市|町|村)(.*)/',$text,$match); $address1 = $match[1].$match[2]; $address2 = $match[3]; 住所の最初に出てきた郡市町村にマッチさせるにはどうしたら良いのでしょうか? 正規表現の勉強に役立つサイトもあれば教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>住所の最初に出てきた郡市町村にマッチさせる ちなみにこれだけなら最短マッチ.*?をつかいます <?PHP $pattern='/(.*?(?:郡|市|町|村))(.*)/'; $str="東京都多摩市本多摩1-1"; preg_match($pattern,$str,$match); print_r( $match); $str="東京都町田市元町田1-1"; preg_match($pattern,$str,$match); print_r( $match); ?>

taaaaaaa
質問者

お礼

最短マッチのサンプルありがとうございます。 場所をどこにつけたらいいのか分からなかったので助かります。

その他の回答 (3)

回答No.4

preg_match('/(.*?)(郡|市|町|村)(.*)/u',$text,$match); $address1 = $match[1].$match[2]; $address2 = $match[3]; * や + の後に ? をつけると最初に見つけたときに検索をやめる 通称「ものぐさマッチ」になります。 あとマルチバイト変数の場合は修飾子の u をつけないと うまく動いてくれないかもしれません(UTF-8の場合) また、やっかいな話で「千葉県市川市」や「三重県四日市市」は 望んだ通りにマッチしてきませんので郡、市、町、村が入る市区町村は 例外処理が必要になります。

taaaaaaa
質問者

お礼

ヒントをありがとうございます。 例外処理が出るのでやっかいですね。

  • singlecat
  • ベストアンサー率33% (139/418)
回答No.2

「郡市町村」ですか、政令指定都市の"区"を考えないと東京23区は分割できませんよ。 一番良いのはJIS5コードと呼ばれる、地方公共団体コード(都道県コード2桁+市区町村コード3桁)のマスタと当てて分割する事ですね。 但し、都道府県名が無い住所などが混在した場合に、 北区とか府中市とか複数の都道府県で重複する名称や 新旧漢字が混在(糟屋郡・粕屋郡)なども考慮する必要がありますね。

taaaaaaa
質問者

お礼

ヒントありがとうございます。 例外をどうするか検討中です。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

郡山市、四日市市、町田市、東村山市とかどうするの? ちゃんとやりたいなら最初に出てきた○○とかそういうのでは無理なので 住所データを別途もって完全一致で処理するしかないと思いますよ

taaaaaaa
質問者

お礼

シンプルに処理する方法を検討中です。 助言ありがとうございます。

関連するQ&A