ruby_learner 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/contents/questions/sequential_check/section_10/part_1/lib/answer.rb +5 -7
- data/contents/questions/sequential_check/section_10/part_1/lib/sentence.org +10 -8
- data/contents/questions/sequential_check/section_10/part_1/lib/workplace.rb +1 -1
- data/contents/questions/sequential_check/section_10/part_1/spec/workplace_spec.rb +4 -4
- data/contents/questions/sequential_check/section_10/part_2/lib/answer.rb +6 -7
- data/contents/questions/sequential_check/section_10/part_2/lib/sentence.org +9 -7
- data/contents/questions/sequential_check/section_10/part_2/lib/workplace.rb +1 -1
- data/contents/questions/sequential_check/section_10/part_2/spec/workplace_spec.rb +4 -9
- data/contents/questions/sequential_check/section_10/part_3/lib/answer.rb +12 -0
- data/contents/questions/sequential_check/section_10/part_3/lib/sentence.org +8 -0
- data/contents/questions/sequential_check/section_10/part_3/lib/workplace.rb +1 -0
- data/contents/questions/sequential_check/{section_6/part_4 → section_10/part_3}/spec/spec_helper.rb +0 -0
- data/contents/questions/sequential_check/section_10/part_3/spec/workplace_spec.rb +10 -0
- data/contents/questions/sequential_check/section_2/foo/nbar/nbaz/n +0 -0
- data/contents/questions/sequential_check/section_2/part_3/lib/answer.rb +3 -6
- data/contents/questions/sequential_check/section_2/part_3/lib/sentence.org +2 -0
- data/contents/questions/sequential_check/section_2/part_3/lib/workplace.rb +0 -4
- data/contents/questions/sequential_check/section_2/part_3/spec/workplace_spec.rb +8 -7
- data/contents/questions/sequential_check/section_3/part_2/lib/answer.rb +3 -5
- data/contents/questions/sequential_check/section_3/part_2/lib/workplace.rb +0 -4
- data/contents/questions/sequential_check/section_3/part_2/spec/workplace_spec.rb +8 -7
- data/contents/questions/sequential_check/section_4/part_2/lib/answer.rb +2 -2
- data/contents/questions/sequential_check/section_4/part_2/lib/workplace.rb +1 -1
- data/contents/questions/sequential_check/section_4/part_3/lib/answer.rb +8 -10
- data/contents/questions/sequential_check/section_4/part_3/lib/sentence.org +1 -0
- data/contents/questions/sequential_check/section_4/part_3/lib/workplace.rb +1 -3
- data/contents/questions/sequential_check/section_4/part_3/spec/workplace_spec.rb +6 -7
- data/contents/questions/sequential_check/section_6/part_2/lib/answer.rb +9 -4
- data/contents/questions/sequential_check/section_6/part_2/lib/sentence.org +35 -2
- data/contents/questions/sequential_check/section_6/part_2/lib/workplace.rb +2 -0
- data/contents/questions/sequential_check/section_6/part_2/spec/workplace_spec.rb +9 -10
- data/contents/questions/sequential_check/section_6/part_3/lib/answer.rb +5 -5
- data/contents/questions/sequential_check/section_6/part_3/lib/sentence.org +44 -5
- data/contents/questions/sequential_check/section_6/part_3/lib/workplace.rb +3 -0
- data/contents/questions/sequential_check/section_6/part_3/spec/workplace_spec.rb +2 -2
- data/contents/questions/sequential_check/section_7/part_1/lib/answer.rb +5 -3
- data/contents/questions/sequential_check/section_7/part_1/lib/sentence.org +22 -16
- data/contents/questions/sequential_check/section_7/part_1/spec/workplace_spec.rb +8 -8
- data/contents/questions/sequential_check/section_7/part_2/lib/answer.rb +6 -6
- data/contents/questions/sequential_check/section_7/part_2/lib/sentence.org +23 -22
- data/contents/questions/sequential_check/section_7/part_2/spec/workplace_spec.rb +11 -5
- data/contents/questions/sequential_check/section_7/part_3/lib/answer.rb +13 -0
- data/contents/questions/sequential_check/section_7/part_3/lib/sentence.org +24 -0
- data/contents/questions/sequential_check/section_7/part_3/lib/workplace.rb +4 -0
- data/contents/questions/sequential_check/section_7/part_3/spec/spec_helper.rb +100 -0
- data/contents/questions/sequential_check/section_7/part_3/spec/workplace_spec.rb +15 -0
- data/contents/questions/sequential_check/section_8/part_1/lib/answer.rb +11 -6
- data/contents/questions/sequential_check/section_8/part_1/lib/sentence.org +66 -10
- data/contents/questions/sequential_check/section_8/part_1/lib/workplace.rb +10 -0
- data/contents/questions/sequential_check/section_8/part_1/spec/workplace_spec.rb +28 -9
- data/contents/questions/sequential_check/section_8/part_2/lib/answer.rb +14 -0
- data/contents/questions/sequential_check/section_8/part_2/lib/sentence.org +80 -0
- data/contents/questions/sequential_check/section_8/part_2/lib/workplace.rb +1 -0
- data/contents/questions/sequential_check/section_8/part_2/spec/spec_helper.rb +100 -0
- data/contents/questions/sequential_check/section_8/part_2/spec/workplace_spec.rb +34 -0
- data/contents/questions/sequential_check/section_8/part_3/lib/answer.rb +20 -0
- data/contents/questions/sequential_check/section_8/part_3/lib/sentence.org +80 -0
- data/contents/questions/sequential_check/section_8/part_3/lib/workplace.rb +11 -0
- data/contents/questions/sequential_check/section_8/part_3/spec/spec_helper.rb +100 -0
- data/contents/questions/sequential_check/section_8/part_3/spec/workplace_spec.rb +34 -0
- data/contents/questions/sequential_check/section_9/part_1/lib/answer.rb +9 -4
- data/contents/questions/sequential_check/section_9/part_1/lib/sentence.org +93 -4
- data/contents/questions/sequential_check/section_9/part_1/spec/workplace_spec.rb +14 -5
- data/contents/questions/sequential_check/section_9/part_2/lib/answer.rb +8 -5
- data/contents/questions/sequential_check/section_9/part_2/lib/sentence.org +92 -10
- data/contents/questions/sequential_check/section_9/part_2/spec/workplace_spec.rb +14 -5
- data/contents/questions/sequential_check/section_9/part_3/lib/answer.rb +7 -9
- data/contents/questions/sequential_check/section_9/part_3/lib/sentence.org +93 -4
- data/contents/questions/sequential_check/section_9/part_3/spec/workplace_spec.rb +14 -5
- data/lib/ruby_learner/sequential_main.rb +25 -12
- data/lib/ruby_learner/version.rb +1 -1
- metadata +26 -7
- data/contents/questions/sequential_check/section_6/part_4/lib/answer.rb +0 -9
- data/contents/questions/sequential_check/section_6/part_4/lib/sentence.org +0 -12
- data/contents/questions/sequential_check/section_6/part_4/lib/workplace.rb +0 -1
- data/contents/questions/sequential_check/section_6/part_4/spec/workplace_spec.rb +0 -9
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
require "open3"
|
|
3
|
+
require "#{ENV['HOME']}/.ruby_learner/workshop/lib/workplace.rb"
|
|
4
|
+
|
|
5
|
+
is_instance_method = false
|
|
6
|
+
is_stdout_method = false
|
|
7
|
+
filename = "#{ENV['HOME']}/.ruby_learner/workshop/lib/workplace.rb"
|
|
8
|
+
|
|
9
|
+
RSpec.describe "class-check" do
|
|
10
|
+
it 'chesk Hello class contents' do
|
|
11
|
+
hello = Hello.new('sasaki')
|
|
12
|
+
expect{ hello.stdout }.to output("Hello, sasaki.\n").to_stdout
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'check instance-method, return boolean' do
|
|
16
|
+
File.open(filename, "r") do |file|
|
|
17
|
+
file.each_line do |line|
|
|
18
|
+
is_instance_method = true if line.include?('AccessHello.new')
|
|
19
|
+
is_stdout_method = true if line.include?('.stdout')
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
puts "ErrorMessage: you don't use class.new--methods." if !is_instance_method
|
|
24
|
+
puts "ErrorMessage: you don't use class.stdout--methods." if !is_stdout_method
|
|
25
|
+
|
|
26
|
+
expect( is_instance_method ).to eq(true)
|
|
27
|
+
expect( is_stdout_method ).to eq(true)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "given 'tanaka', return Hello, tanaka.\\n" do
|
|
31
|
+
stdout, stderr, status = Open3.capture3("ruby #{filename}")
|
|
32
|
+
expect { puts stdout }.to output("Hello, tanaka.\nHello, nakata.\n").to_stdout
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# section_9/part_1/answer.rb
|
|
2
|
-
# 9-1-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
# 9-1-regular-exp.rb
|
|
3
|
+
str = STDIN.gets.chomp
|
|
4
|
+
regular_exp = /Hello/ =~ str
|
|
5
|
+
|
|
6
|
+
if regular_exp
|
|
7
|
+
puts regular_exp
|
|
8
|
+
else
|
|
9
|
+
puts 'not match.'
|
|
10
|
+
end
|
|
@@ -1,8 +1,97 @@
|
|
|
1
|
-
|
|
1
|
+
-課題-
|
|
2
|
+
キーボードからの標準入力で文字列を取得後,得られた文字列の中に「Hello」が含まれている場合はその「Hello」の開始する位置をputsで出力せよ.また含まれない場合は,putsを用いて「not match.」を出力せよ.
|
|
2
3
|
|
|
4
|
+
* 文字列のマッチングの確認
|
|
5
|
+
- 使用方法...正規表現 =~ 文字列 (ifメソッドの条件式等に使用することがあります.)
|
|
6
|
+
- 機能...マッチしない場合にnilを,マッチする場合には文字列の中で,そのマッチする文字列が始まる文字の位置を返します.
|
|
3
7
|
|
|
4
|
-
|
|
8
|
+
* 正規表現
|
|
9
|
+
- 正規表現とは文字列とマッチングを行うパターンの記法のことです.
|
|
5
10
|
|
|
6
|
-
|
|
11
|
+
** /文字/
|
|
12
|
+
- 使用例.../ABC/
|
|
13
|
+
- 機能...//内の文字が文字列に含まれているかどうか.
|
|
7
14
|
|
|
8
|
-
|
|
15
|
+
** /^文字/
|
|
16
|
+
- 使用例.../^ABC/
|
|
17
|
+
- 機能.../^ /内の文字が文字列の先頭から始まっているかどうか.
|
|
18
|
+
|
|
19
|
+
** /文字$/
|
|
20
|
+
- 使用例.../ABC$/
|
|
21
|
+
- 機能.../ $/内の文字が文字列の最後にあるかどうか.
|
|
22
|
+
|
|
23
|
+
* マッチさせたい文字範囲
|
|
24
|
+
- 使用方法...[文字範囲]
|
|
25
|
+
- 機能...0から9やaからzまでのように連続する文字を簡略的に書くことができます.
|
|
26
|
+
- 実際の使用方法1.../[ABC]/
|
|
27
|
+
- 解説1...文字列にA,B,Cのどれかが一つでもあるかどうか
|
|
28
|
+
- 実際の使用方法2.../7[ABC][^A-C]/
|
|
29
|
+
- 解説2...文字列に7とA,B,CのどれかとA,B,C以外の文字が並んでいる箇所があるかどうか
|
|
30
|
+
|
|
31
|
+
** [文字文字...]
|
|
32
|
+
- 使用例1...[AB]
|
|
33
|
+
- 機能1...AまたはB
|
|
34
|
+
- 使用例2...[21ACB]
|
|
35
|
+
- 機能2...1,2,A,B,Cのどれかの文字(順番は関係ありません)
|
|
36
|
+
|
|
37
|
+
** [^文字文字...]
|
|
38
|
+
- 使用例...[^21ACB]
|
|
39
|
+
- 機能...1,2,A,B,C以外の文字
|
|
40
|
+
|
|
41
|
+
** [A-Z]
|
|
42
|
+
- AからZまでの,アルファベットの大文字全部
|
|
43
|
+
|
|
44
|
+
** [a-z]
|
|
45
|
+
- aからzまでの,アルファベットの小文字全部
|
|
46
|
+
|
|
47
|
+
** [0-9]
|
|
48
|
+
- 0から9までの,数字全部
|
|
49
|
+
|
|
50
|
+
** [A-Za-z]
|
|
51
|
+
- AからZまでと,aからzまでのアルファベット全部
|
|
52
|
+
|
|
53
|
+
** [A-Za-z_-]
|
|
54
|
+
- アルファベット全部と_と-
|
|
55
|
+
* 様々な意味を持つ特別な文字
|
|
56
|
+
- 一部の文字には特別な機能を持つものがあります.
|
|
57
|
+
|
|
58
|
+
** ドット(.)
|
|
59
|
+
- 機能...どんな文字でもいいから1文字にマッチする.
|
|
60
|
+
- 使用例.../AB.../
|
|
61
|
+
- 解説...文字列の中にABの後ろに3文字続いている箇所があるかどうか.
|
|
62
|
+
|
|
63
|
+
** \s
|
|
64
|
+
- 機能...空白,タブ,改行文字,改行ページ文字とマッチする.
|
|
65
|
+
|
|
66
|
+
** \d
|
|
67
|
+
- 機能...0から9までの数字とマッチする.
|
|
68
|
+
|
|
69
|
+
** \w
|
|
70
|
+
- 機能...英数字にマッチする.
|
|
71
|
+
|
|
72
|
+
** \A
|
|
73
|
+
- 機能...文字列の先頭にマッチする.(/^と同じ意味)
|
|
74
|
+
|
|
75
|
+
** \z
|
|
76
|
+
- 機能...文字列の末尾にマッチする.($/と同じ意味)
|
|
77
|
+
|
|
78
|
+
** \
|
|
79
|
+
- 後ろにつづく1文字が^や$や[]などの特殊な文字の場合は,特殊な機能を無くし普通の文字にする.
|
|
80
|
+
* 同じ文字の繰り返し
|
|
81
|
+
- 同じ文字の繰り返しを簡略的に書くことができます.
|
|
82
|
+
- * ...0回以上の繰り返し
|
|
83
|
+
- + ...1回以上の繰り返し
|
|
84
|
+
- ? ...0回または1回の繰り返し
|
|
85
|
+
- {n} ...n回の繰り返し
|
|
86
|
+
- {n,m} ...n~m回の繰り返し
|
|
87
|
+
|
|
88
|
+
- 使用例.../A*C/
|
|
89
|
+
-「AAAACB」の文字列に対して...AAAACがマッチしている
|
|
90
|
+
-「AAAABC」の文字列に対して...マッチしていない
|
|
91
|
+
|
|
92
|
+
** 最短マッチ「 *? と +? 」
|
|
93
|
+
- 0回以上の繰り返しを表す「*」と一回以上の繰り返しを表す「+」は,可能な限り長い部分にマッチします.逆に,マッチする可能性のある部分のうち一番短い部分にマッチさせる場合に使用します.
|
|
94
|
+
** ()の機能
|
|
95
|
+
- 「()」を用いると,複数の文字列の繰り返しを表現できるようになります.
|
|
96
|
+
** 選択「 | 」
|
|
97
|
+
- 「|」を用いることで,いくつかの候補の中からどれか一つに当てはまるものにマッチする,というパターンを書くこともできます.
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
require "open3"
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
workshop = "#{ENV['HOME']}/.ruby_learner/workshop"
|
|
5
|
+
|
|
6
|
+
RSpec.describe "regular-exp-check" do
|
|
7
|
+
it 'return "6\n"' do
|
|
8
|
+
stdout, stderr, status = Open3.capture3("ruby #{workshop}/lib/workplace.rb", :stdin_data=>"Ruby, Hello\n")
|
|
9
|
+
expect { puts stdout }.to output("6\n").to_stdout
|
|
10
|
+
end
|
|
11
|
+
it 'return "8\n"' do
|
|
12
|
+
stdout, stderr, status = Open3.capture3("ruby #{workshop}/lib/workplace.rb", :stdin_data=> "tanaka, Hello\n")
|
|
13
|
+
expect { puts stdout }.to output("8\n").to_stdout
|
|
14
|
+
end
|
|
15
|
+
it 'return "not match\n"' do
|
|
16
|
+
stdout, stderr, status = Open3.capture3("ruby #{workshop}/lib/workplace.rb", :stdin_data=>"Ruby, tanaka\n")
|
|
17
|
+
expect { puts stdout }.to output("not match.\n").to_stdout
|
|
9
18
|
end
|
|
10
19
|
end
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
# section_9/part_2/answer.rb
|
|
2
|
-
# 9-2-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
# 9-2-regular-exp.rb
|
|
3
|
+
str = STDIN.gets.chomp
|
|
4
|
+
regular_exp = /A*B/ =~ str
|
|
5
|
+
|
|
6
|
+
if regular_exp
|
|
7
|
+
puts 'match A*B.'
|
|
8
|
+
else
|
|
9
|
+
puts 'not match.'
|
|
7
10
|
end
|
|
@@ -1,15 +1,97 @@
|
|
|
1
|
-
|
|
1
|
+
-課題-
|
|
2
|
+
キーボードからの標準入力で文字列を取得後,得られた文字列の中に0個以上の複数の「A」の後に「D」が含まれている場合は「match A*B.」をputsで出力せよ.また含まれない場合は,putsを用いて「not match.」を出力せよ.
|
|
2
3
|
|
|
4
|
+
* 文字列のマッチングの確認
|
|
5
|
+
- 使用方法...正規表現 =~ 文字列 (ifメソッドの条件式等に使用することがあります.)
|
|
6
|
+
- 機能...マッチしない場合にnilを,マッチする場合には文字列の中で,そのマッチする文字列が始まる文字の位置を返します.
|
|
3
7
|
|
|
4
|
-
|
|
8
|
+
* 正規表現
|
|
9
|
+
- 正規表現とは文字列とマッチングを行うパターンの記法のことです.
|
|
5
10
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
end
|
|
10
|
-
file.close
|
|
11
|
+
** /文字/
|
|
12
|
+
- 使用例.../ABC/
|
|
13
|
+
- 機能...//内の文字が文字列に含まれているかどうか.
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
** /^文字/
|
|
16
|
+
- 使用例.../^ABC/
|
|
17
|
+
- 機能.../^ /内の文字が文字列の先頭から始まっているかどうか.
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
** /文字$/
|
|
20
|
+
- 使用例.../ABC$/
|
|
21
|
+
- 機能.../ $/内の文字が文字列の最後にあるかどうか.
|
|
22
|
+
|
|
23
|
+
* マッチさせたい文字範囲
|
|
24
|
+
- 使用方法...[文字範囲]
|
|
25
|
+
- 機能...0から9やaからzまでのように連続する文字を簡略的に書くことができます.
|
|
26
|
+
- 実際の使用方法1.../[ABC]/
|
|
27
|
+
- 解説1...文字列にA,B,Cのどれかが一つでもあるかどうか
|
|
28
|
+
- 実際の使用方法2.../7[ABC][^A-C]/
|
|
29
|
+
- 解説2...文字列に7とA,B,CのどれかとA,B,C以外の文字が並んでいる箇所があるかどうか
|
|
30
|
+
|
|
31
|
+
** [文字文字...]
|
|
32
|
+
- 使用例1...[AB]
|
|
33
|
+
- 機能1...AまたはB
|
|
34
|
+
- 使用例2...[21ACB]
|
|
35
|
+
- 機能2...1,2,A,B,Cのどれかの文字(順番は関係ありません)
|
|
36
|
+
|
|
37
|
+
** [^文字文字...]
|
|
38
|
+
- 使用例...[^21ACB]
|
|
39
|
+
- 機能...1,2,A,B,C以外の文字
|
|
40
|
+
|
|
41
|
+
** [A-Z]
|
|
42
|
+
- AからZまでの,アルファベットの大文字全部
|
|
43
|
+
|
|
44
|
+
** [a-z]
|
|
45
|
+
- aからzまでの,アルファベットの小文字全部
|
|
46
|
+
|
|
47
|
+
** [0-9]
|
|
48
|
+
- 0から9までの,数字全部
|
|
49
|
+
|
|
50
|
+
** [A-Za-z]
|
|
51
|
+
- AからZまでと,aからzまでのアルファベット全部
|
|
52
|
+
|
|
53
|
+
** [A-Za-z_-]
|
|
54
|
+
- アルファベット全部と_と-
|
|
55
|
+
* 様々な意味を持つ特別な文字
|
|
56
|
+
- 一部の文字には特別な機能を持つものがあります.
|
|
57
|
+
|
|
58
|
+
** ドット(.)
|
|
59
|
+
- 機能...どんな文字でもいいから1文字にマッチする.
|
|
60
|
+
- 使用例.../AB.../
|
|
61
|
+
- 解説...文字列の中にABの後ろに3文字続いている箇所があるかどうか.
|
|
62
|
+
|
|
63
|
+
** \s
|
|
64
|
+
- 機能...空白,タブ,改行文字,改行ページ文字とマッチする.
|
|
65
|
+
|
|
66
|
+
** \d
|
|
67
|
+
- 機能...0から9までの数字とマッチする.
|
|
68
|
+
|
|
69
|
+
** \w
|
|
70
|
+
- 機能...英数字にマッチする.
|
|
71
|
+
|
|
72
|
+
** \A
|
|
73
|
+
- 機能...文字列の先頭にマッチする.(/^と同じ意味)
|
|
74
|
+
|
|
75
|
+
** \z
|
|
76
|
+
- 機能...文字列の末尾にマッチする.($/と同じ意味)
|
|
77
|
+
|
|
78
|
+
** \
|
|
79
|
+
- 後ろにつづく1文字が^や$や[]などの特殊な文字の場合は,特殊な機能を無くし普通の文字にする.
|
|
80
|
+
* 同じ文字の繰り返し
|
|
81
|
+
- 同じ文字の繰り返しを簡略的に書くことができます.
|
|
82
|
+
- * ...0回以上の繰り返し
|
|
83
|
+
- + ...1回以上の繰り返し
|
|
84
|
+
- ? ...0回または1回の繰り返し
|
|
85
|
+
- {n} ...n回の繰り返し
|
|
86
|
+
- {n,m} ...n~m回の繰り返し
|
|
87
|
+
|
|
88
|
+
- 使用例.../A*C/
|
|
89
|
+
-「AAAACB」の文字列に対して...AAAACがマッチしている
|
|
90
|
+
-「AAAABC」の文字列に対して...マッチしていない
|
|
91
|
+
|
|
92
|
+
** 最短マッチ「 *? と +? 」
|
|
93
|
+
- 0回以上の繰り返しを表す「*」と一回以上の繰り返しを表す「+」は,可能な限り長い部分にマッチします.逆に,マッチする可能性のある部分のうち一番短い部分にマッチさせる場合に使用します.
|
|
94
|
+
** ()の機能
|
|
95
|
+
- 「()」を用いると,複数の文字列の繰り返しを表現できるようになります.
|
|
96
|
+
** 選択「 | 」
|
|
97
|
+
- 「|」を用いることで,いくつかの候補の中からどれか一つに当てはまるものにマッチする,というパターンを書くこともできます.
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
require "open3"
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
workshop = "#{ENV['HOME']}/.ruby_learner/workshop"
|
|
5
|
+
|
|
6
|
+
RSpec.describe "regular-exp-check" do
|
|
7
|
+
it 'given "Ruby, AAB Hello\n", return "match A*B.\n"' do
|
|
8
|
+
stdout, stderr, status = Open3.capture3("ruby #{workshop}/lib/workplace.rb", :stdin_data=>"Ruby, AAB Hello\n")
|
|
9
|
+
expect { puts stdout }.to output("match A*B.\n").to_stdout
|
|
10
|
+
end
|
|
11
|
+
it 'given "taBnaka, Hello\n", return "match A*B.\n"' do
|
|
12
|
+
stdout, stderr, status = Open3.capture3("ruby #{workshop}/lib/workplace.rb", :stdin_data=> "taBnaka, Hello\n")
|
|
13
|
+
expect { puts stdout }.to output("match A*B.\n").to_stdout
|
|
14
|
+
end
|
|
15
|
+
it 'given "Ruby, tanaka\n", return "not match\n"' do
|
|
16
|
+
stdout, stderr, status = Open3.capture3("ruby #{workshop}/lib/workplace.rb", :stdin_data=>"Ruby, tanaka\n")
|
|
17
|
+
expect { puts stdout }.to output("not match.\n").to_stdout
|
|
9
18
|
end
|
|
10
19
|
end
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# section_9/part_3/answer.rb
|
|
2
|
-
# 9-3-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
# 9-3-regular-exp.rb
|
|
3
|
+
str = STDIN.gets.chomp
|
|
4
|
+
regular_exp = /^[A-Z][0-9]/ =~ str
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
end
|
|
6
|
+
if regular_exp
|
|
7
|
+
puts 'match.'
|
|
8
|
+
else
|
|
9
|
+
puts 'not match.'
|
|
11
10
|
end
|
|
12
|
-
file.close
|
|
@@ -1,8 +1,97 @@
|
|
|
1
|
-
|
|
1
|
+
-課題-
|
|
2
|
+
キーボードからの標準入力で文字列を取得後,得られた文字列の先頭に「A~Z」,その次が「0~9」が含まれている場合は「match.」をputsで出力せよ.また含まれない場合は,putsを用いて「not match.」を出力せよ.
|
|
2
3
|
|
|
4
|
+
* 文字列のマッチングの確認
|
|
5
|
+
- 使用方法...正規表現 =~ 文字列 (ifメソッドの条件式等に使用することがあります.)
|
|
6
|
+
- 機能...マッチしない場合にnilを,マッチする場合には文字列の中で,そのマッチする文字列が始まる文字の位置を返します.
|
|
3
7
|
|
|
4
|
-
|
|
8
|
+
* 正規表現
|
|
9
|
+
- 正規表現とは文字列とマッチングを行うパターンの記法のことです.
|
|
5
10
|
|
|
6
|
-
|
|
11
|
+
** /文字/
|
|
12
|
+
- 使用例.../ABC/
|
|
13
|
+
- 機能...//内の文字が文字列に含まれているかどうか.
|
|
7
14
|
|
|
8
|
-
|
|
15
|
+
** /^文字/
|
|
16
|
+
- 使用例.../^ABC/
|
|
17
|
+
- 機能.../^ /内の文字が文字列の先頭から始まっているかどうか.
|
|
18
|
+
|
|
19
|
+
** /文字$/
|
|
20
|
+
- 使用例.../ABC$/
|
|
21
|
+
- 機能.../ $/内の文字が文字列の最後にあるかどうか.
|
|
22
|
+
|
|
23
|
+
* マッチさせたい文字範囲
|
|
24
|
+
- 使用方法...[文字範囲]
|
|
25
|
+
- 機能...0から9やaからzまでのように連続する文字を簡略的に書くことができます.
|
|
26
|
+
- 実際の使用方法1.../[ABC]/
|
|
27
|
+
- 解説1...文字列にA,B,Cのどれかが一つでもあるかどうか
|
|
28
|
+
- 実際の使用方法2.../7[ABC][^A-C]/
|
|
29
|
+
- 解説2...文字列に7とA,B,CのどれかとA,B,C以外の文字が並んでいる箇所があるかどうか
|
|
30
|
+
|
|
31
|
+
** [文字文字...]
|
|
32
|
+
- 使用例1...[AB]
|
|
33
|
+
- 機能1...AまたはB
|
|
34
|
+
- 使用例2...[21ACB]
|
|
35
|
+
- 機能2...1,2,A,B,Cのどれかの文字(順番は関係ありません)
|
|
36
|
+
|
|
37
|
+
** [^文字文字...]
|
|
38
|
+
- 使用例...[^21ACB]
|
|
39
|
+
- 機能...1,2,A,B,C以外の文字
|
|
40
|
+
|
|
41
|
+
** [A-Z]
|
|
42
|
+
- AからZまでの,アルファベットの大文字全部
|
|
43
|
+
|
|
44
|
+
** [a-z]
|
|
45
|
+
- aからzまでの,アルファベットの小文字全部
|
|
46
|
+
|
|
47
|
+
** [0-9]
|
|
48
|
+
- 0から9までの,数字全部
|
|
49
|
+
|
|
50
|
+
** [A-Za-z]
|
|
51
|
+
- AからZまでと,aからzまでのアルファベット全部
|
|
52
|
+
|
|
53
|
+
** [A-Za-z_-]
|
|
54
|
+
- アルファベット全部と_と-
|
|
55
|
+
* 様々な意味を持つ特別な文字
|
|
56
|
+
- 一部の文字には特別な機能を持つものがあります.
|
|
57
|
+
|
|
58
|
+
** ドット(.)
|
|
59
|
+
- 機能...どんな文字でもいいから1文字にマッチする.
|
|
60
|
+
- 使用例.../AB.../
|
|
61
|
+
- 解説...文字列の中にABの後ろに3文字続いている箇所があるかどうか.
|
|
62
|
+
|
|
63
|
+
** \s
|
|
64
|
+
- 機能...空白,タブ,改行文字,改行ページ文字とマッチする.
|
|
65
|
+
|
|
66
|
+
** \d
|
|
67
|
+
- 機能...0から9までの数字とマッチする.
|
|
68
|
+
|
|
69
|
+
** \w
|
|
70
|
+
- 機能...英数字にマッチする.
|
|
71
|
+
|
|
72
|
+
** \A
|
|
73
|
+
- 機能...文字列の先頭にマッチする.(/^と同じ意味)
|
|
74
|
+
|
|
75
|
+
** \z
|
|
76
|
+
- 機能...文字列の末尾にマッチする.($/と同じ意味)
|
|
77
|
+
|
|
78
|
+
** \
|
|
79
|
+
- 後ろにつづく1文字が^や$や[]などの特殊な文字の場合は,特殊な機能を無くし普通の文字にする.
|
|
80
|
+
* 同じ文字の繰り返し
|
|
81
|
+
- 同じ文字の繰り返しを簡略的に書くことができます.
|
|
82
|
+
- * ...0回以上の繰り返し
|
|
83
|
+
- + ...1回以上の繰り返し
|
|
84
|
+
- ? ...0回または1回の繰り返し
|
|
85
|
+
- {n} ...n回の繰り返し
|
|
86
|
+
- {n,m} ...n~m回の繰り返し
|
|
87
|
+
|
|
88
|
+
- 使用例.../A*C/
|
|
89
|
+
-「AAAACB」の文字列に対して...AAAACがマッチしている
|
|
90
|
+
-「AAAABC」の文字列に対して...マッチしていない
|
|
91
|
+
|
|
92
|
+
** 最短マッチ「 *? と +? 」
|
|
93
|
+
- 0回以上の繰り返しを表す「*」と一回以上の繰り返しを表す「+」は,可能な限り長い部分にマッチします.逆に,マッチする可能性のある部分のうち一番短い部分にマッチさせる場合に使用します.
|
|
94
|
+
** ()の機能
|
|
95
|
+
- 「()」を用いると,複数の文字列の繰り返しを表現できるようになります.
|
|
96
|
+
** 選択「 | 」
|
|
97
|
+
- 「|」を用いることで,いくつかの候補の中からどれか一つに当てはまるものにマッチする,というパターンを書くこともできます.
|