アプリ版:「スタンプのみでお礼する」機能のリリースについて

住所を郡市町村までと、それ以降に分けたいと考えています。


preg_match('/(.*)(郡|市|町|村)(.*)/',$text,$match);

$address1 = $match[1].$match[2];
$address2 = $match[3];


住所の最初に出てきた郡市町村にマッチさせるにはどうしたら良いのでしょうか?

正規表現の勉強に役立つサイトもあれば教えて下さい。

A 回答 (4件)

>住所の最初に出てきた郡市町村にマッチさせる



ちなみにこれだけなら最短マッチ.*?をつかいます

<?PHP
$pattern='/(.*?(?:郡|市|町|村))(.*)/';
$str="東京都多摩市本多摩1-1";
preg_match($pattern,$str,$match);
print_r( $match);
$str="東京都町田市元町田1-1";
preg_match($pattern,$str,$match);
print_r( $match);
?>
    • good
    • 0
この回答へのお礼

最短マッチのサンプルありがとうございます。

場所をどこにつけたらいいのか分からなかったので助かります。

お礼日時:2012/06/21 17:08

preg_match('/(.*?)(郡|市|町|村)(.*)/u',$text,$match);



$address1 = $match[1].$match[2];
$address2 = $match[3];


* や + の後に ? をつけると最初に見つけたときに検索をやめる
通称「ものぐさマッチ」になります。
あとマルチバイト変数の場合は修飾子の u をつけないと
うまく動いてくれないかもしれません(UTF-8の場合)


また、やっかいな話で「千葉県市川市」や「三重県四日市市」は
望んだ通りにマッチしてきませんので郡、市、町、村が入る市区町村は
例外処理が必要になります。
    • good
    • 0
この回答へのお礼

ヒントをありがとうございます。

例外処理が出るのでやっかいですね。

お礼日時:2012/06/21 17:09

「郡市町村」ですか、政令指定都市の"区"を考えないと東京23区は分割できませんよ。



一番良いのはJIS5コードと呼ばれる、地方公共団体コード(都道県コード2桁+市区町村コード3桁)のマスタと当てて分割する事ですね。

但し、都道府県名が無い住所などが混在した場合に、
北区とか府中市とか複数の都道府県で重複する名称や
新旧漢字が混在(糟屋郡・粕屋郡)なども考慮する必要がありますね。
    • good
    • 0
この回答へのお礼

ヒントありがとうございます。

例外をどうするか検討中です。

お礼日時:2012/06/21 17:12

郡山市、四日市市、町田市、東村山市とかどうするの?


ちゃんとやりたいなら最初に出てきた○○とかそういうのでは無理なので
住所データを別途もって完全一致で処理するしかないと思いますよ
    • good
    • 0
この回答へのお礼

シンプルに処理する方法を検討中です。

助言ありがとうございます。

お礼日時:2012/06/21 17:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!