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

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

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

PHP

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

正規表現

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

Q&A

2回答

6806閲覧

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

naoyahige

総合スコア23

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

PHP

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

正規表現

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

0グッド

0クリップ

投稿2017/04/13 08:51

編集2022/01/12 10:55

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(タップで地図が開きます)」

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

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

投稿2017/04/13 09:08

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2017/04/13 14:11

例:京都市役所 京都市中京区寺町通御池上る上本能寺前町488 札幌市役所:札幌市中央区北1条西2丁目(で終わり) 龍ケ崎市役所: 茨城県龍ケ崎市3710番地 四街道市役所:千葉県四街道市鹿渡無番地 青ヶ島村役場:東京都青ヶ島村無番地 矢巾町役場:岩手県紫波郡矢巾町南矢幅第13地割123 とまあ、地域限定のものすらある始末なので、少なくとも正規表現にできるような「パターン」は全くありません。
guest

0

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

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

投稿2017/04/13 09:16

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問