回答編集履歴

6

テキスト修正

2015/05/29 00:43

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
  さらに、ruby のプログラムで正規表現を / で囲むことで作るときは、
50
50
 
51
- 正規表現の中に現れる、バックスラッシュという文字にマッチさせたい
51
+ 正規表現の中に現れる、スラッシュという文字そのものにマッチさせたい
52
52
 
53
53
  という意図で書く、/ もエスケープする必要があるので
54
54
 

5

テキスト修正

2015/05/29 00:43

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -256,15 +256,13 @@
256
256
 
257
257
  ただし、
258
258
 
259
+
260
+
259
- srcやhrefとその値の間に空白文字があるかもしれなかったり、
261
+ - 属性名(srcやhrefとその値の間に空白文字があるかもしれなかったり、
260
-
262
+
261
- 属性の値を囲むクオートがダブルクオートだけではなくシングルクオートも
263
+ - 属性の値を囲むクオートがダブルクオートだけではなくシングルクオートもあるかもしれなかったり
262
-
263
-  あるかもしれなかったり
264
+
264
-
265
- srcやhrefが大文字で、SRCやHREFとなっていることもあったり、
265
+ - srcやhrefが大文字で、SRCやHREFとなっていることもあったり、なかったり
266
-
267
-  なかったり
268
266
 
269
267
  すると、これらに対応するために正規表現にも追加が必要になってきて、
270
268
 

4

テキスト修正

2015/05/29 00:42

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- **abcにマッチする正規表現は、単にそのままabc**
9
+ **abcにマッチする正規表現は、単にそのまま abc**
10
10
 
11
11
 
12
12
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  これと同じで、「http://hoge.comにマッチする正規表現」を作るときは、
26
26
 
27
- まずは
27
+ まずは、そのまま
28
28
 
29
29
 
30
30
 
@@ -32,11 +32,11 @@
32
32
 
33
33
 
34
34
 
35
- から始めます。これでそのまま使えたら楽なのですが、半角ドットは、
35
+ から始めます。このまま何も手を加えずに使えたら楽なのですが、
36
-
36
+
37
- ここままだと「任意の一文字」を表してしまうのでエスケープする
37
+ 半角ドットは、ここままだと「任意の一文字」を表してしまうので
38
-
38
+
39
- 必要があり、
39
+ エスケープする必要があり、
40
40
 
41
41
 
42
42
 
@@ -124,21 +124,33 @@
124
124
 
125
125
  上記の例では、読み込むテキストの各行に、
126
126
 
127
+
128
+
127
129
  http://hoge.com
128
130
 
131
+
132
+
129
- が1つ以上あれば、その行を出力します。注意点としては
133
+ が1つ以上あれば、その行を出力します。
130
-
134
+
131
- この正規表現では
135
+ 注意点としてはこの正規表現では
136
+
137
+
132
138
 
133
139
  http://hoge.com/test/a.php
134
140
 
141
+
142
+
135
143
 
136
144
 
145
+
146
+
137
147
  http://hoge.comic.jp
138
148
 
149
+
150
+
139
- といったものを含む行もマッチする点なのです。しかし、これらもマッチするもので
151
+ といったものを含む行もマッチする点です。しかし、これらもマッチする
140
-
152
+
141
- あっても問題がない状況も考えられます。たとえば
153
+ 正規表現であっても問題がない状況も考えられます。たとえば
142
154
 
143
155
 
144
156
 
@@ -242,15 +254,31 @@
242
254
 
243
255
  ---
244
256
 
257
+ ただし、
258
+
245
- ただし、srcやhrefと、その値の間に空白文字があるかもしれなかったり、
259
+ srcやhrefと、その値の間に空白文字があるかもしれなかったり、
246
-
247
-
248
-
260
+
249
- 属性の値を囲むクオートがダブルクオートだけではなくシングルクオートも
261
+ 属性の値を囲むクオートがダブルクオートだけではなくシングルクオートも
262
+
250
-
263
+  あるかもしれなかったり
264
+
265
+ ・srcやhrefが大文字で、SRCやHREFとなっていることもあったり、
266
+
267
+  なかったり
268
+
251
- あるかもしれなかったりすると、これらに対応するために正規表現も追加が
269
+ すると、これらに対応するために正規表現も追加が必要になってきて、
270
+
252
-
271
+ これもまた、先に述べた
272
+
273
+
274
+
275
+ 入力されるテキストについてどれだけのことを知っているかに
276
+
277
+ よって、書くべき正規表現の複雑さが変わってくる
278
+
279
+
280
+
253
- 必要になってきます。
281
+ ことの例です。
254
282
 
255
283
 
256
284
 

3

テキスト修正

2015/05/29 00:29

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,9 +2,15 @@
2
2
 
3
3
 
4
4
 
5
+ まず、考え方として
6
+
7
+
8
+
5
- まず、考え方として、「abcにマッチする正規表現は、単にそのままabc」です。
9
+ **abcにマッチする正規表現は、単にそのままabc**
6
-
10
+
11
+
12
+
7
- rubyで正規表現 abc を使うときには、 / で前後を囲んで
13
+ です。rubyで正規表現 abc を使うときには、 / で前後を囲んで
8
14
 
9
15
 
10
16
 
@@ -12,11 +18,13 @@
12
18
 
13
19
 
14
20
 
15
- としますが、あくまで正規表現と呼るものが該当する上記の
21
+ としますが、この例で正規表現と呼ばれるものが該当する部分
16
-
22
+
17
- / と / で囲まれた中にある、 abc です。
23
+ 上記の/ と / で囲まれた中にある、 abc です。
18
-
24
+
19
- これと同じで、「http://hoge.comにマッチする正規表現」を作るときは、まずは
25
+ これと同じで、「http://hoge.comにマッチする正規表現」を作るときは、
26
+
27
+ まずは
20
28
 
21
29
 
22
30
 
@@ -38,9 +46,11 @@
38
46
 
39
47
  とします。
40
48
 
41
- さらに、ruby のプログラムで正規表現を / で囲むことで
49
+ さらに、ruby のプログラムで正規表現を / で囲むことで作るときは、
50
+
42
-
51
+ 正規表現の中に現れる、バックスラッシュという文字にマッチさせたい
52
+
43
- 作るきは正規表現の中の / もエスケープする必要があるので
53
+ いう意図で書く、/ もエスケープする必要があるので
44
54
 
45
55
 
46
56
 
@@ -52,25 +62,137 @@
52
62
 
53
63
  ```lang-ruby
54
64
 
65
+ /http:\/\/hoge\.com/
66
+
67
+ ```
68
+
69
+ とすれば、rubyのプログラムの中で使えるようになります。
70
+
71
+ 以下、使用例です。
72
+
73
+ ---
74
+
75
+ [ykt68@sakura-vps] ruby -v
76
+
77
+
78
+
79
+ ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
80
+
81
+ [ykt68@sakura-vps] cat question10461.rb
82
+
83
+ ```lang-xxx
84
+
85
+ # coding: utf-8
86
+
87
+
88
+
89
+ text = <<EOS
90
+
91
+ <a href="?p=2">&nbsp;2&nbsp;</a>
92
+
93
+ <a href="http://fuga.com/0000.php" rel="bookmark">
94
+
95
+ <a href="http://hoge.com"><img src="http://img.hoge.com/0000.jpeg">
96
+
97
+ EOS
98
+
99
+
100
+
55
101
  regex = /http:\/\/hoge\.com/
56
102
 
103
+
104
+
105
+ text.each_line do |line|
106
+
107
+ if regex =~ line
108
+
109
+ print line
110
+
111
+ end
112
+
113
+ end
114
+
57
- ```
115
+ ```
58
-
116
+
59
- とすれば、rubyのプログラムの中で使えるようになります。
117
+ [ykt68@sakura-vps] ruby question10461.rb
118
+
60
-
119
+ <a href="http://hoge.com"><img src="http://img.hoge.com/0000.jpeg">
120
+
61
- 以下、使用例です。
121
+ [ykt68@sakura-vps]
62
-
122
+
63
- ---
123
+ ---
124
+
64
-
125
+ 上記の例では、読み込むテキストの各行に、
126
+
65
- [ykt68@sakura-vps] ruby -v
127
+ http://hoge.com
128
+
66
-
129
+ が1つ以上あれば、その行を出力します。注意点としては
130
+
67
-
131
+ この正規表現では
132
+
68
-
133
+ http://hoge.com/test/a.php
134
+
135
+
136
+
137
+ http://hoge.comic.jp
138
+
139
+ といったものを含む行もマッチする点なのです。しかし、これらもマッチするもので
140
+
141
+ あっても問題がない状況も考えられます。たとえば
142
+
143
+
144
+
145
+ > 入力されるテキストに出てくるURLのドメインが
146
+
147
+ > hoge.comである場合、そのURLは
148
+
149
+ > http://hoge.com に限られる。
150
+
151
+
152
+
153
+ という前提があり、それを知っていたとするならば、
154
+
155
+ http://hoge.com を取り出すのに、
156
+
157
+ 正規表現 http:\/\/hoge\.com で十分事足りる
158
+
159
+ ことになります。
160
+
161
+ つまり、入力されるテキストについてどれだけのことを知っているかに
162
+
163
+ よって、書くべき正規表現の複雑さが変わってくるということです。
164
+
165
+
166
+
167
+ 応用として、
168
+
169
+
170
+
171
+ 入力されたHTMLに含まれる、<a>要素のhref属性または<img>要素のsrc属性の値
172
+
69
- ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
173
+ として出現する、http://hoge.com で始まるURLをすべて抜き出す。その際に、
174
+
70
-
175
+ それがhrefの値なのか、srcの値なのか分かるようにする。
176
+
177
+
178
+
179
+ という要件があったとします。
180
+
181
+ その際は、たとえば正規表現regexを、以下のようにして取り出せます。
182
+
183
+ ```lang-ruby
184
+
185
+ regex = /(href|src)="(http:\/\/hoge\.com[^"]*)"/
186
+
187
+ ```
188
+
189
+ 以下、これの使用例です。(※ソースコードの色付けが若干おかしくなります。)
190
+
191
+ ---
192
+
71
- [ykt68@sakura-vps] cat question10461.rb
193
+ [ykt68@sakura-vps] cat question10461-2.rb
72
-
194
+
73
- ```lang-xxx
195
+ ```lang-xxc
74
196
 
75
197
  # coding: utf-8
76
198
 
@@ -78,25 +200,25 @@
78
200
 
79
201
  text = <<EOS
80
202
 
81
- <a href="?p=2">&nbsp;2&nbsp;</a>
203
+ <a href="http://hoge.com/test/a.php">&nbsp;2&nbsp;</a>
82
-
204
+
83
- <a href="http://fuga.com/0000.php" rel="bookmark">
205
+ <a href="http://hoge.com/0000.php" rel="bookmark">
84
-
206
+
85
- <a href="http://hoge.com"><img src="http://img.hoge.com/0000.jpeg">
207
+ <a href="http://hoge.com"><img src="http://hoge.com/img/0000.jpeg">
86
208
 
87
209
  EOS
88
210
 
89
211
 
90
212
 
91
- regex = /http:\/\/hoge\.com/
213
+ regex = /(href|src)="(http:\/\/hoge\.com[^"]*)"/
92
214
 
93
215
 
94
216
 
95
217
  text.each_line do |line|
96
218
 
97
- if regex =~ line
219
+ line.scan(regex) do |s|
98
-
220
+
99
- print line
221
+ p s
100
222
 
101
223
  end
102
224
 
@@ -104,78 +226,6 @@
104
226
 
105
227
  ```
106
228
 
107
- [ykt68@sakura-vps] ruby question10461.rb
108
-
109
- <a href="http://hoge.com"><img src="http://img.hoge.com/0000.jpeg">
110
-
111
- [ykt68@sakura-vps]
112
-
113
- ---
114
-
115
-
116
-
117
- 応用として、
118
-
119
-
120
-
121
- 入力されたHTMLに含まれる、<a>要素のhref属性または<img>要素のsrc属性の値
122
-
123
- として出現する、http://hoge.com で始まるURLをすべて抜き出す。その際に、
124
-
125
- それがhrefの値なのか、srcの値なのか分かるようにする。
126
-
127
-
128
-
129
- という要件があったとします。
130
-
131
- その際は、たとえば正規表現regexを、以下のようにして取り出せます。
132
-
133
- ```lang-ruby
134
-
135
- regex = /(href|src)="(http:\/\/hoge\.com[^"]*)"/
136
-
137
- ```
138
-
139
- 以下、これの使用例です。(※ソースコードの色付けが若干おかしくなります。)
140
-
141
- ---
142
-
143
- [ykt68@sakura-vps] cat question10461-2.rb
144
-
145
- ```lang-xxc
146
-
147
- # coding: utf-8
148
-
149
-
150
-
151
- text = <<EOS
152
-
153
- <a href="http://hoge.com/test/a.php">&nbsp;2&nbsp;</a>
154
-
155
- <a href="http://hoge.com/0000.php" rel="bookmark">
156
-
157
- <a href="http://hoge.com"><img src="http://hoge.com/img/0000.jpeg">
158
-
159
- EOS
160
-
161
-
162
-
163
- regex = /(href|src)="(http:\/\/hoge\.com[^"]*)"/
164
-
165
-
166
-
167
- text.each_line do |line|
168
-
169
- line.scan(regex) do |s|
170
-
171
- p s
172
-
173
- end
174
-
175
- end
176
-
177
- ```
178
-
179
229
  [ykt68@sakura-vps] ruby question10461-2.rb
180
230
 
181
231
  ["href", "http://hoge.com/test/a.php"]

2

テキスト修正

2015/05/28 23:28

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,9 +2,53 @@
2
2
 
3
3
 
4
4
 
5
+ まず、考え方として、「abcにマッチする正規表現」は、単にそのまま「abc」です。
6
+
7
+ rubyで正規表現 abc を使うときには、 / で前後を囲んで
8
+
9
+
10
+
11
+ regex = /abc/
12
+
13
+
14
+
15
+ としますが、あくまで正規表現と呼べるものが該当するのは上記の
16
+
17
+ / と / で囲まれた中にある、 abc です。
18
+
5
- まず単に http://hoge.com にマッチする正規表現は
19
+ これと同じでhttp://hoge.comにマッチする正規表現」を作るとき、まずは
20
+
21
+
22
+
6
-
23
+ http://hoge.com
24
+
25
+
26
+
7
-
27
+ から始めます。これでそのまま使えたら楽なのですが、半角ドットは、
28
+
29
+ ここままだと「任意の一文字」を表してしまうのでエスケープする
30
+
31
+ 必要があり、
32
+
33
+
34
+
35
+ http://hoge\.com
36
+
37
+
38
+
39
+ とします。
40
+
41
+ さらに、ruby のプログラムで正規表現を / で囲むことで
42
+
43
+ 作るときは、正規表現の中の / もエスケープする必要があるので
44
+
45
+
46
+
47
+ http:\/\/hoge\.com
48
+
49
+
50
+
51
+ とします。これの前後を / で囲んで
8
52
 
9
53
  ```lang-ruby
10
54
 
@@ -12,7 +56,9 @@
12
56
 
13
57
  ```
14
58
 
59
+ とすれば、rubyのプログラムの中で使えるようになります。
60
+
15
- と書けます。以下、例です。
61
+ 以下、使用例です。
16
62
 
17
63
  ---
18
64
 
@@ -90,7 +136,7 @@
90
136
 
91
137
  ```
92
138
 
93
- 以下、これの使用例です。
139
+ 以下、これの使用例です。(※ソースコードの色付けが若干おかしくなります。)
94
140
 
95
141
  ---
96
142
 

1

テキスト修正

2015/05/28 23:09

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -84,11 +84,19 @@
84
84
 
85
85
  その際は、たとえば正規表現regexを、以下のようにして取り出せます。
86
86
 
87
+ ```lang-ruby
88
+
89
+ regex = /(href|src)="(http:\/\/hoge\.com[^"]*)"/
90
+
91
+ ```
92
+
93
+ 以下、これの使用例です。
94
+
87
95
  ---
88
96
 
89
97
  [ykt68@sakura-vps] cat question10461-2.rb
90
98
 
91
- ```lang-xxx
99
+ ```lang-xxc
92
100
 
93
101
  # coding: utf-8
94
102
 
@@ -138,6 +146,16 @@
138
146
 
139
147
  ---
140
148
 
149
+ ただし、srcやhrefと、その値の間に空白文字があるかもしれなかったり、
141
150
 
142
151
 
152
+
153
+ 属性の値を囲むクオートがダブルクオートだけではなくシングルクオートも
154
+
155
+ あるかもしれなかったりすると、これらに対応するために正規表現も追加が
156
+
157
+ 必要になってきます。
158
+
159
+
160
+
143
- 参考になりましたら幸いです。
161
+ 以上、ご参考になりましたら幸いです。