teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

テキスト修正

2015/05/29 00:43

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  とします。
25
25
  さらに、ruby のプログラムで正規表現を / で囲むことで作るときは、
26
- 正規表現の中に現れる、バックスラッシュという文字にマッチさせたい
26
+ 正規表現の中に現れる、スラッシュという文字そのものにマッチさせたい
27
27
  という意図で書く、/ もエスケープする必要があるので
28
28
 
29
29
  http:\/\/hoge\.com

5

テキスト修正

2015/05/29 00:43

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -127,11 +127,10 @@
127
127
 
128
128
  ---
129
129
  ただし、
130
+
130
- srcやhrefとその値の間に空白文字があるかもしれなかったり、
131
+ - 属性名(srcやhrefとその値の間に空白文字があるかもしれなかったり、
131
- 属性の値を囲むクオートがダブルクオートだけではなくシングルクオートも
132
+ - 属性の値を囲むクオートがダブルクオートだけではなくシングルクオートもあるかもしれなかったり
132
-  あるかもしれなかったり
133
- srcやhrefが大文字で、SRCやHREFとなっていることもあったり、
133
+ - srcやhrefが大文字で、SRCやHREFとなっていることもあったり、なかったり
134
-  なかったり
135
134
  すると、これらに対応するために正規表現にも追加が必要になってきて、
136
135
  これもまた、先に述べた
137
136
 

4

テキスト修正

2015/05/29 00:42

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  まず、考え方として
4
4
 
5
- **abcにマッチする正規表現は、単にそのままabc**
5
+ **abcにマッチする正規表現は、単にそのまま abc**
6
6
 
7
7
  です。rubyで正規表現 abc を使うときには、 / で前後を囲んで
8
8
 
@@ -11,13 +11,13 @@
11
11
  としますが、この例で正規表現と呼ばれるものが該当する部分は、
12
12
  上記の/ と / で囲まれた中にある、 abc です。
13
13
  これと同じで、「http://hoge.comにマッチする正規表現」を作るときは、
14
- まずは
14
+ まずは、そのまま
15
15
 
16
16
  http://hoge.com
17
17
 
18
- から始めます。これでそのまま使えたら楽なのですが、半角ドットは、
18
+ から始めます。このまま何も手を加えずに使えたら楽なのですが、
19
- ここままだと「任意の一文字」を表してしまうのでエスケープする
19
+ 半角ドットは、ここままだと「任意の一文字」を表してしまうので
20
- 必要があり、
20
+ エスケープする必要があり、
21
21
 
22
22
  http://hoge\.com
23
23
 
@@ -61,15 +61,21 @@
61
61
  [ykt68@sakura-vps]
62
62
  ---
63
63
  上記の例では、読み込むテキストの各行に、
64
+
64
65
  http://hoge.com
66
+
65
- が1つ以上あれば、その行を出力します。注意点としては
67
+ が1つ以上あれば、その行を出力します。
66
- この正規表現では
68
+ 注意点としてはこの正規表現では
69
+
67
70
  http://hoge.com/test/a.php
71
+
68
72
 
73
+
69
74
  http://hoge.comic.jp
70
- といったものを含む行もマッチする点なのです。しかし、これらもマッチするもので
71
- あっても問題がない状況も考えられます。たとえば
72
75
 
76
+ といったものを含む行もマッチする点です。しかし、これらもマッチする
77
+ 正規表現であっても問題がない状況も考えられます。たとえば
78
+
73
79
  > 入力されるテキストに出てくるURLのドメインが
74
80
  > hoge.comである場合、そのURLは
75
81
  > http://hoge.com に限られる。
@@ -120,10 +126,18 @@
120
126
  [ykt68@sakura-vps]
121
127
 
122
128
  ---
129
+ ただし、
123
- ただし、srcやhrefと、その値の間に空白文字があるかもしれなかったり、
130
+ srcやhrefと、その値の間に空白文字があるかもしれなかったり、
131
+ ・属性の値を囲むクオートがダブルクオートだけではなくシングルクオートも
132
+  あるかもしれなかったり
133
+ ・srcやhrefが大文字で、SRCやHREFとなっていることもあったり、
134
+  なかったり
135
+ すると、これらに対応するために正規表現にも追加が必要になってきて、
136
+ これもまた、先に述べた
124
137
 
125
- 属性の値を囲むクオーがダブルクオートだけではなくシングルクオートも
138
+ 入力されるテキスについてどれだけのことを知っているかに
126
- あるかもしれなかたりするとこれらに対応するために正規表現も追加
139
+ 書くべき正規表現の複雑さ変わってくる
127
- 必要になってきます。
128
140
 
141
+ ことの例です。
142
+
129
143
  以上、ご参考になりましたら幸いです。

3

テキスト修正

2015/05/29 00:29

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,13 +1,17 @@
1
1
  こんにちは。
2
2
 
3
- まず、考え方として、「abcにマッチする正規表現」は、単にそのまま「abc」です。
3
+ まず、考え方として
4
- rubyで正規表現 abc を使うときには、 / で前後を囲んで
5
4
 
5
+ **abcにマッチする正規表現は、単にそのままabc**
6
+
7
+ です。rubyで正規表現 abc を使うときには、 / で前後を囲んで
8
+
6
9
  regex = /abc/
7
10
 
8
- としますが、あくまで正規表現と呼るものが該当する上記の
11
+ としますが、この例で正規表現と呼ばれるものが該当する部分
9
- / と / で囲まれた中にある、 abc です。
12
+ 上記の/ と / で囲まれた中にある、 abc です。
10
- これと同じで、「http://hoge.comにマッチする正規表現」を作るときは、まずは
13
+ これと同じで、「http://hoge.comにマッチする正規表現」を作るときは、
14
+ まずは
11
15
 
12
16
  http://hoge.com
13
17
 
@@ -18,14 +22,15 @@
18
22
  http://hoge\.com
19
23
 
20
24
  とします。
21
- さらに、ruby のプログラムで正規表現を / で囲むことで
25
+ さらに、ruby のプログラムで正規表現を / で囲むことで作るときは、
26
+ 正規表現の中に現れる、バックスラッシュという文字にマッチさせたい
22
- 作るきは正規表現の中の / もエスケープする必要があるので
27
+ いう意図で書く、/ もエスケープする必要があるので
23
28
 
24
29
  http:\/\/hoge\.com
25
30
 
26
31
  とします。これの前後を / で囲んで
27
32
  ```lang-ruby
28
- regex = /http:\/\/hoge\.com/
33
+ /http:\/\/hoge\.com/
29
34
  ```
30
35
  とすれば、rubyのプログラムの中で使えるようになります。
31
36
  以下、使用例です。
@@ -55,7 +60,27 @@
55
60
  <a href="http://hoge.com"><img src="http://img.hoge.com/0000.jpeg">
56
61
  [ykt68@sakura-vps]
57
62
  ---
63
+ 上記の例では、読み込むテキストの各行に、
64
+ http://hoge.com
65
+ が1つ以上あれば、その行を出力します。注意点としては
66
+ この正規表現では
67
+ http://hoge.com/test/a.php
68
+
69
+ http://hoge.comic.jp
70
+ といったものを含む行もマッチする点なのです。しかし、これらもマッチするもので
71
+ あっても問題がない状況も考えられます。たとえば
58
72
 
73
+ > 入力されるテキストに出てくるURLのドメインが
74
+ > hoge.comである場合、そのURLは
75
+ > http://hoge.com に限られる。
76
+
77
+ という前提があり、それを知っていたとするならば、
78
+ http://hoge.com を取り出すのに、
79
+ 正規表現 http:\/\/hoge\.com で十分事足りる
80
+ ことになります。
81
+ つまり、入力されるテキストについてどれだけのことを知っているかに
82
+ よって、書くべき正規表現の複雑さが変わってくるということです。
83
+
59
84
  応用として、
60
85
 
61
86
  入力されたHTMLに含まれる、<a>要素のhref属性または<img>要素のsrc属性の値

2

テキスト修正

2015/05/28 23:28

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,11 +1,34 @@
1
1
  こんにちは。
2
2
 
3
- まず、 http://hoge.com にマッチする正規表現は
3
+ まず、考え方として、「abcにマッチする正規表現、単にそのまま「abc」です。
4
+ rubyで正規表現 abc を使うときには、 / で前後を囲んで
4
5
 
6
+ regex = /abc/
7
+
8
+ としますが、あくまで正規表現と呼べるものが該当するのは上記の
9
+ / と / で囲まれた中にある、 abc です。
10
+ これと同じで、「http://hoge.comにマッチする正規表現」を作るときは、まずは
11
+
12
+ http://hoge.com
13
+
14
+ から始めます。これでそのまま使えたら楽なのですが、半角ドットは、
15
+ ここままだと「任意の一文字」を表してしまうのでエスケープする
16
+ 必要があり、
17
+
18
+ http://hoge\.com
19
+
20
+ とします。
21
+ さらに、ruby のプログラムで正規表現を / で囲むことで
22
+ 作るときは、正規表現の中の / もエスケープする必要があるので
23
+
24
+ http:\/\/hoge\.com
25
+
26
+ とします。これの前後を / で囲んで
5
27
  ```lang-ruby
6
28
  regex = /http:\/\/hoge\.com/
7
29
  ```
30
+ とすれば、rubyのプログラムの中で使えるようになります。
8
- と書けます。以下、例です。
31
+ 以下、使用例です。
9
32
  ---
10
33
  [ykt68@sakura-vps] ruby -v
11
34
 
@@ -44,7 +67,7 @@
44
67
  ```lang-ruby
45
68
  regex = /(href|src)="(http:\/\/hoge\.com[^"]*)"/
46
69
  ```
47
- 以下、これの使用例です。
70
+ 以下、これの使用例です。(※ソースコードの色付けが若干おかしくなります。)
48
71
  ---
49
72
  [ykt68@sakura-vps] cat question10461-2.rb
50
73
  ```lang-xxc

1

テキスト修正

2015/05/28 23:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -41,9 +41,13 @@
41
41
 
42
42
  という要件があったとします。
43
43
  その際は、たとえば正規表現regexを、以下のようにして取り出せます。
44
+ ```lang-ruby
45
+ regex = /(href|src)="(http:\/\/hoge\.com[^"]*)"/
46
+ ```
47
+ 以下、これの使用例です。
44
48
  ---
45
49
  [ykt68@sakura-vps] cat question10461-2.rb
46
- ```lang-xxx
50
+ ```lang-xxc
47
51
  # coding: utf-8
48
52
 
49
53
  text = <<EOS
@@ -68,5 +72,10 @@
68
72
  [ykt68@sakura-vps]
69
73
 
70
74
  ---
75
+ ただし、srcやhrefと、その値の間に空白文字があるかもしれなかったり、
71
76
 
77
+ 属性の値を囲むクオートがダブルクオートだけではなくシングルクオートも
78
+ あるかもしれなかったりすると、これらに対応するために正規表現も追加が
79
+ 必要になってきます。
80
+
72
- 参考になりましたら幸いです。
81
+ 以上、ご参考になりましたら幸いです。