ちくのう症(蓄膿症)は「菌」が原因!?

例えば次のような丁目以降が若干異なる3つの住所があったとして

東京都千代田区神田神保町1丁目103

「東京都千代田区神田神保町」「1」「103」

東京都千代田区神田錦町3丁目14-12

「東京都千代田区神田錦町」「3」「14」「12」

東京都千代田区神田錦町3丁目14-12-110

「東京都千代田区神田錦町」「3」「14」「12」「110」

をpreg_match関数を使って抽出したいのですが
どのようなマッチ条件を記述すれば良いのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

単純に、「先頭から始まる数字以外」か「数字」を拾えばよいのでは?



<?PHP
check("東京都千代田区神田神保町1丁目103");
check("東京都千代田区神田錦町3丁目14-12");
check("東京都千代田区神田錦町3丁目14-12-110");

function check($str)
{
$pattern="/^[^\d]+|\d+/";
preg_match_all($pattern,$str,$matches);
print_r($matches);
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど、それでできました。
参考になりました。

お礼日時:2016/05/18 18:55

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q市区町村と番地を分けたいのですが。。。

住所データがあります。「××市○○町1-2-3」。
ここで、「××市○○町」と「1-2-3」を別フィールドに分けたいと思っています。ACCESSまたはExcelのVBAまたは更新クエリ、文字列関数等で行う場合、どのようにすればよいか教えて下さい。なお、「××市○○町」と「1-2-3」の間には空白はありません。

Aベストアンサー

 
自前で文字列のマッチング等を行わなくても、Office (97以上?)にバンドルされている、「MSYubin7.dll」を使用すれば可能です。

サンプルコードですが、Accessで、以下の手順を踏み、

(1) レポートの新規作成ボタンを押下。
(2) はがきウィザードを選択。
(3) レポートを作成。

作成されたレポートのクラスモジュール内のAPI宣言部と「Sub DevideAddress」を見れば参考になると思います。

単に「左から最初の数字の位置で文字列を切り出す」(No.2のコメント参照)のではなく、都道府県名、市区町村名、町名、字名すべてを対応辞書と照合してマッチングできるようです。したがって、No.2のコメントで問題点として指摘した「漢数字で番地が記載されたデータ」にも対応できます。

問題点は、OfficeのヘルプにもMSDNにもドキュメントらしいドキュメントがないことです。
(上記ウィザードで生成されたコードにもコメントは皆無です)

もともと、参考URLの製品の機能の一部をMicrosoftにOEM提供したもので、Office製品の、いわば「おまけ」程度の位置付けですので、きちんとしたドキュメント、細かな機能が必要であれば、正規の製品版を購入した方がよいかもしれません。
(一度限りの単発仕事なら、そのためだけに買うのはちょっともったいない感じがしますが・・・)
 

参考URL:http://www.adv.co.jp/products/yu7v2/default.htm

 
自前で文字列のマッチング等を行わなくても、Office (97以上?)にバンドルされている、「MSYubin7.dll」を使用すれば可能です。

サンプルコードですが、Accessで、以下の手順を踏み、

(1) レポートの新規作成ボタンを押下。
(2) はがきウィザードを選択。
(3) レポートを作成。

作成されたレポートのクラスモジュール内のAPI宣言部と「Sub DevideAddress」を見れば参考になると思います。

単に「左から最初の数字の位置で文字列を切り出す」(No.2のコメント参照)のではなく、都道府県名、市区町...続きを読む

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

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


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

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


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

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

Aベストアンサー

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

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

<?PHP
$pattern='/(.*?(?:郡|市|町|村))(.*)/';
$str="東京都多摩市本多摩1-1";
preg_match($pattern,$str,$match);
print_r( $match);
$str="東京都町田市元町田1-1";
preg_match($pattern,$str,$match);
print_r( $match);
?>


人気Q&Aランキング