PHP・正規表現でいくつかのフォーマットから住所を抜き出したく、そのコードを教えてください。

ーーー
<パターンA>
■住所
東京都渋谷区渋谷1-1-1

<パターンB>
住所:東京都渋谷区渋谷1-1-1

<パターンC>
<td style="width: 20%; height: 22px;">住所</td>
<td style="width: 80%; height: 22px;">東京都渋谷区渋谷1-1-1</td>
ーーー
※住所が「所在地」「場所」の場合もある。

途中まで考えてみたのは以下のとおりです。

$post_code= "【該当のページのソースコード】"
$contents = strip_tags($post_code);//タグ除去
$contents = preg_replace('/所在地(\n|\r|\r\n)/', '所在地', $contents);//住所と所在地で見出しのあとに改行がある場合は削除
$contents = preg_replace('/住所(\n|\r|\r\n)/', '住所', $contents);

preg_match('/(住所|所在地)(.+)\n/', $contents, $match);//住所と所在地がある行の住所部分を抜き出す
$text = $match[2];
$text = str_replace(':', '', $text);//住所に「:」とかあれば除く
$text = str_replace(':', '', $text);
$text = str_replace(' ', '', $text);
$text = str_replace(' ', '', $text);

URLは不要ですのでご教示いただけましたら幸いです。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2020/02/26 14:23:12
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153

ポイント950pt

こんな感じでどうでしょう。

<?php
$s = ...;

$s = strip_tags($s);
$s = preg_replace('/住所(\n|\r|\r\n)/', '住所:', $s);
$s = preg_replace('/(住所|所在地|場所)(\n|\r|\r\n)/', '住所:', $s);
$s = preg_replace('/^.*(住所|所在地|場所):/', '', $s);


抽出元の文字列を、「住所:(...)\n」に寄せてから住所を切り出す、ってやってみました。

id:pmoeko

ありがとうございます。
テキストが上記3パターンの部分のみであれば、これで大丈夫そうです。
しかし【該当のページのソースコード】の中にそれらが含まれているので、その行だけ抜き出すのにpreg_matchが必要かな、と考えました。

2020/02/24 10:39:45
id:pmoeko

こんな感じにアレンジして旨く動くようになりました!ありがとうございました


$s = strip_tags($s);
$s = preg_replace('/住所(\n|\r|\r\n)/', '住所:', $s);
$s = preg_replace('/(住所|所在地|場所)(\n|\r|\r\n)/', '住所:', $s);
preg_match('/(住所:)(.+)\n/', $s, $match);
$text = $match[2];
echo $text;

2020/02/24 11:01:18

その他の回答1件)

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153ここでベストアンサー

ポイント950pt

こんな感じでどうでしょう。

<?php
$s = ...;

$s = strip_tags($s);
$s = preg_replace('/住所(\n|\r|\r\n)/', '住所:', $s);
$s = preg_replace('/(住所|所在地|場所)(\n|\r|\r\n)/', '住所:', $s);
$s = preg_replace('/^.*(住所|所在地|場所):/', '', $s);


抽出元の文字列を、「住所:(...)\n」に寄せてから住所を切り出す、ってやってみました。

id:pmoeko

ありがとうございます。
テキストが上記3パターンの部分のみであれば、これで大丈夫そうです。
しかし【該当のページのソースコード】の中にそれらが含まれているので、その行だけ抜き出すのにpreg_matchが必要かな、と考えました。

2020/02/24 10:39:45
id:pmoeko

こんな感じにアレンジして旨く動くようになりました!ありがとうございました


$s = strip_tags($s);
$s = preg_replace('/住所(\n|\r|\r\n)/', '住所:', $s);
$s = preg_replace('/(住所|所在地|場所)(\n|\r|\r\n)/', '住所:', $s);
preg_match('/(住所:)(.+)\n/', $s, $match);
$text = $match[2];
echo $text;

2020/02/24 11:01:18
id:chsm No.2

回答回数33ベストアンサー獲得回数5

ポイント50pt

https://qiita.com/riotam/items/0c149a53e64a3aeb08d5
上記アドレスにいい方法がのっています。

id:chsm

すみません。」
上の回答見てませんでした。

2020/02/26 04:16:54
id:pmoeko

ありがとうございます

2020/02/26 14:20:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません