回答編集履歴

1

\[正規表現\] を追記

2017/04/19 04:45

投稿

think49
think49

スコア18162

test CHANGED
@@ -1,3 +1,7 @@
1
+ ### HTML文書内に文字列があるのか
2
+
3
+
4
+
1
5
  > 「javascript:」 「style=」 「 onMousever」 「'」 「<link」で止まっていました。
2
6
 
3
7
 
@@ -10,6 +14,70 @@
10
14
 
11
15
 
12
16
 
17
+ ### 正規表現
18
+
19
+
20
+
21
+ > ```PHP
22
+
23
+ > 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)) {
24
+
25
+ > echo "住所 : ".$matches[0];
26
+
27
+ > }
28
+
29
+ > ```
30
+
31
+
32
+
33
+ この正規表現が住所となる文字列が連続して存在していればマッチします。
34
+
35
+ つまり、住所となる文字列の間に余計な文字列があればマッチしません。
36
+
37
+
38
+
39
+ ```
40
+
41
+ 東京都<span style="color: red; background-color: white; padding: 0; margin: 0;">品川区〇〇</span>
42
+
43
+ ```
44
+
45
+
46
+
47
+ 上記文字列は`.{3,9}区` によって、`<span style="color: red; background-color: white; padding: 0; margin: 0;">品川区` をマッチさせようとしますが、文字長が9文字を超えるのでマッチしないでしょう。
48
+
49
+
50
+
51
+ ```
52
+
53
+ 東京都
54
+
55
+ 品川区〇〇
56
+
57
+ ```
58
+
59
+
60
+
61
+ 上記文字列は「東京都」と「品川区」の間に改行がある為、`.{3,9}区` ではマッチしないでしょう。
62
+
63
+
64
+
65
+ ### マッチしない事が分かるHTML文字列
66
+
67
+
68
+
69
+ 先述のようにマッチしない文字列は何パターンか考えられます。
70
+
71
+ 「javascript:」 「style=」 「 onMousever」 「'」 「<link」は部分的なので、マッチしなかった周辺文字列を確認して、住所となる文字列がどのようにマークアップされているかを確認して対応して下さい。
72
+
73
+ 自己解決が不可能ならその文字列を開示して下さい。
74
+
75
+
76
+
77
+ ### 著作権の問題
78
+
79
+
80
+
13
81
  いずれにしても、スクレイピングは**著作権侵害**行為になりがちなので具体的なアドバイスをするのは気が引けますね…。
14
82
 
15
83