質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • PHP

    20302questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • 正規表現

    791questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

  • スクレイピング

    330questions

正規表現での住所の表し方

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,402

naoyahige

score 1

php勉強中の初心者です。
いろいろなサイトから住所をスクレイピングするプログラムを練習しているのですが、
正規表現の部分でわからないことがあり質問させていただきます。

if(preg_match("/^(東京都|北海道|(?:京都|大阪)府|.{6,9}県)((?:四日市|廿日市|野々市|かすみがうら|つくばみらい|いちき串木野)市|(?:杵島郡大町|余市郡余市|高市郡高取)町|.{3,12}市.{3,12}区|.{3,9}区|.{3,15}市(?=.*市)|.{3,15}市|.{6,27}町(?=.*町)|.{6,27}町|.{9,24}村(?=.*村)|.{9,24}村)(.*)/",$url_data,$matches)){
  echo "住所 : ".$matches[0];
}

if と preg_matchで正規表現を使って検索をかけているのですが、このままだと、
「愛知県刈谷市に本社を構える我が社は創業1968年に〜・・・」
とか
「大阪市中央区道頓堀1-6-4(タップで地図が開きます)」

などのように、ほしい住所情報以外のものまでついてきてしまいます。
なんとかこれを解消するコード、あるいは、考え方をご教授お願いいたします。

◆追記◆
正規表現の一番最後の
(.*)
この部分をなんとかすればいいというのはわかるのですが・・・

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+6

住所とは何か、というのが定義できないと、正規表現も定義できません。
そして、日本の住所だと、市区町村まで(地方自治体コードが割り振られている部分まで)なら認識させられるでしょうけれども、その下の町名・番地といった部分になっては、どこまでで切ればいいか分からないでしょう。分かち書きされていない以上は、切り分けは事実上不可能です。

  • いわゆる番地表記がない住所もある
  • 番地表記に「イ」「ロ」などが来るような地名が存在する(千葉県の香取市(旧佐原市地区)とか)
  • ビル名などを含めた場合、何が来てもおかしくない

といったあたりを考えれば、「これで住所」といえるようなパターンが存在しません。
存在しないパターンは正規表現に書き記せません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/13 23:11

    例:京都市役所 京都市中京区寺町通御池上る上本能寺前町488
    札幌市役所:札幌市中央区北1条西2丁目(で終わり)
    龍ケ崎市役所: 茨城県龍ケ崎市3710番地
    四街道市役所:千葉県四街道市鹿渡無番地
    青ヶ島村役場:東京都青ヶ島村無番地
    矢巾町役場:岩手県紫波郡矢巾町南矢幅第13地割123

    とまあ、地域限定のものすらある始末なので、少なくとも正規表現にできるような「パターン」は全くありません。

    キャンセル

+4

住所を正規表現でチェックするのは無理があります

たとえば
(?:京都|大阪)府
は「京都府」と「東京都府中市」の両方ヒットします

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20302questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • 正規表現

    791questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

  • スクレイピング

    330questions