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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/contents/questions/sequential_check/section_10/part_1/lib/answer.rb +5 -7
  4. data/contents/questions/sequential_check/section_10/part_1/lib/sentence.org +10 -8
  5. data/contents/questions/sequential_check/section_10/part_1/lib/workplace.rb +1 -1
  6. data/contents/questions/sequential_check/section_10/part_1/spec/workplace_spec.rb +4 -4
  7. data/contents/questions/sequential_check/section_10/part_2/lib/answer.rb +6 -7
  8. data/contents/questions/sequential_check/section_10/part_2/lib/sentence.org +9 -7
  9. data/contents/questions/sequential_check/section_10/part_2/lib/workplace.rb +1 -1
  10. data/contents/questions/sequential_check/section_10/part_2/spec/workplace_spec.rb +4 -9
  11. data/contents/questions/sequential_check/section_10/part_3/lib/answer.rb +12 -0
  12. data/contents/questions/sequential_check/section_10/part_3/lib/sentence.org +8 -0
  13. data/contents/questions/sequential_check/section_10/part_3/lib/workplace.rb +1 -0
  14. data/contents/questions/sequential_check/{section_6/part_4 → section_10/part_3}/spec/spec_helper.rb +0 -0
  15. data/contents/questions/sequential_check/section_10/part_3/spec/workplace_spec.rb +10 -0
  16. data/contents/questions/sequential_check/section_2/foo/nbar/nbaz/n +0 -0
  17. data/contents/questions/sequential_check/section_2/part_3/lib/answer.rb +3 -6
  18. data/contents/questions/sequential_check/section_2/part_3/lib/sentence.org +2 -0
  19. data/contents/questions/sequential_check/section_2/part_3/lib/workplace.rb +0 -4
  20. data/contents/questions/sequential_check/section_2/part_3/spec/workplace_spec.rb +8 -7
  21. data/contents/questions/sequential_check/section_3/part_2/lib/answer.rb +3 -5
  22. data/contents/questions/sequential_check/section_3/part_2/lib/workplace.rb +0 -4
  23. data/contents/questions/sequential_check/section_3/part_2/spec/workplace_spec.rb +8 -7
  24. data/contents/questions/sequential_check/section_4/part_2/lib/answer.rb +2 -2
  25. data/contents/questions/sequential_check/section_4/part_2/lib/workplace.rb +1 -1
  26. data/contents/questions/sequential_check/section_4/part_3/lib/answer.rb +8 -10
  27. data/contents/questions/sequential_check/section_4/part_3/lib/sentence.org +1 -0
  28. data/contents/questions/sequential_check/section_4/part_3/lib/workplace.rb +1 -3
  29. data/contents/questions/sequential_check/section_4/part_3/spec/workplace_spec.rb +6 -7
  30. data/contents/questions/sequential_check/section_6/part_2/lib/answer.rb +9 -4
  31. data/contents/questions/sequential_check/section_6/part_2/lib/sentence.org +35 -2
  32. data/contents/questions/sequential_check/section_6/part_2/lib/workplace.rb +2 -0
  33. data/contents/questions/sequential_check/section_6/part_2/spec/workplace_spec.rb +9 -10
  34. data/contents/questions/sequential_check/section_6/part_3/lib/answer.rb +5 -5
  35. data/contents/questions/sequential_check/section_6/part_3/lib/sentence.org +44 -5
  36. data/contents/questions/sequential_check/section_6/part_3/lib/workplace.rb +3 -0
  37. data/contents/questions/sequential_check/section_6/part_3/spec/workplace_spec.rb +2 -2
  38. data/contents/questions/sequential_check/section_7/part_1/lib/answer.rb +5 -3
  39. data/contents/questions/sequential_check/section_7/part_1/lib/sentence.org +22 -16
  40. data/contents/questions/sequential_check/section_7/part_1/spec/workplace_spec.rb +8 -8
  41. data/contents/questions/sequential_check/section_7/part_2/lib/answer.rb +6 -6
  42. data/contents/questions/sequential_check/section_7/part_2/lib/sentence.org +23 -22
  43. data/contents/questions/sequential_check/section_7/part_2/spec/workplace_spec.rb +11 -5
  44. data/contents/questions/sequential_check/section_7/part_3/lib/answer.rb +13 -0
  45. data/contents/questions/sequential_check/section_7/part_3/lib/sentence.org +24 -0
  46. data/contents/questions/sequential_check/section_7/part_3/lib/workplace.rb +4 -0
  47. data/contents/questions/sequential_check/section_7/part_3/spec/spec_helper.rb +100 -0
  48. data/contents/questions/sequential_check/section_7/part_3/spec/workplace_spec.rb +15 -0
  49. data/contents/questions/sequential_check/section_8/part_1/lib/answer.rb +11 -6
  50. data/contents/questions/sequential_check/section_8/part_1/lib/sentence.org +66 -10
  51. data/contents/questions/sequential_check/section_8/part_1/lib/workplace.rb +10 -0
  52. data/contents/questions/sequential_check/section_8/part_1/spec/workplace_spec.rb +28 -9
  53. data/contents/questions/sequential_check/section_8/part_2/lib/answer.rb +14 -0
  54. data/contents/questions/sequential_check/section_8/part_2/lib/sentence.org +80 -0
  55. data/contents/questions/sequential_check/section_8/part_2/lib/workplace.rb +1 -0
  56. data/contents/questions/sequential_check/section_8/part_2/spec/spec_helper.rb +100 -0
  57. data/contents/questions/sequential_check/section_8/part_2/spec/workplace_spec.rb +34 -0
  58. data/contents/questions/sequential_check/section_8/part_3/lib/answer.rb +20 -0
  59. data/contents/questions/sequential_check/section_8/part_3/lib/sentence.org +80 -0
  60. data/contents/questions/sequential_check/section_8/part_3/lib/workplace.rb +11 -0
  61. data/contents/questions/sequential_check/section_8/part_3/spec/spec_helper.rb +100 -0
  62. data/contents/questions/sequential_check/section_8/part_3/spec/workplace_spec.rb +34 -0
  63. data/contents/questions/sequential_check/section_9/part_1/lib/answer.rb +9 -4
  64. data/contents/questions/sequential_check/section_9/part_1/lib/sentence.org +93 -4
  65. data/contents/questions/sequential_check/section_9/part_1/spec/workplace_spec.rb +14 -5
  66. data/contents/questions/sequential_check/section_9/part_2/lib/answer.rb +8 -5
  67. data/contents/questions/sequential_check/section_9/part_2/lib/sentence.org +92 -10
  68. data/contents/questions/sequential_check/section_9/part_2/spec/workplace_spec.rb +14 -5
  69. data/contents/questions/sequential_check/section_9/part_3/lib/answer.rb +7 -9
  70. data/contents/questions/sequential_check/section_9/part_3/lib/sentence.org +93 -4
  71. data/contents/questions/sequential_check/section_9/part_3/spec/workplace_spec.rb +14 -5
  72. data/lib/ruby_learner/sequential_main.rb +25 -12
  73. data/lib/ruby_learner/version.rb +1 -1
  74. metadata +26 -7
  75. data/contents/questions/sequential_check/section_6/part_4/lib/answer.rb +0 -9
  76. data/contents/questions/sequential_check/section_6/part_4/lib/sentence.org +0 -12
  77. data/contents/questions/sequential_check/section_6/part_4/lib/workplace.rb +0 -1
  78. 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-file-read.rb
3
- filename = ARGV[0]
4
- text = File.read(filename)
5
- print text
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つの文字列を受け取り、文字列と一致するファイル名のテキストデータを表示するプログラムを作成せよ。
1
+ -課題-
2
+ キーボードからの標準入力で文字列を取得後,得られた文字列の中に「Hello」が含まれている場合はその「Hello」の開始する位置をputsで出力せよ.また含まれない場合は,putsを用いて「not match.」を出力せよ.
2
3
 
4
+ * 文字列のマッチングの確認
5
+ - 使用方法...正規表現 =~ 文字列 (ifメソッドの条件式等に使用することがあります.)
6
+ - 機能...マッチしない場合にnilを,マッチする場合には文字列の中で,そのマッチする文字列が始まる文字の位置を返します.
3
7
 
4
- - File.read
8
+ * 正規表現
9
+ - 正規表現とは文字列とマッチングを行うパターンの記法のことです.
5
10
 
6
- text = File.read(ファイル名)
11
+ ** /文字/
12
+ - 使用例.../ABC/
13
+ - 機能...//内の文字が文字列に含まれているかどうか.
7
14
 
8
- File.readメソッドは、受け取ったファイル名と同じ名前のファイルのデータを読み込むメソッド。
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
- RSpec.describe "ARGV-check" do
5
- it 'given "for-read.txt", return 4' do
6
- workshop = "#{ENV['HOME']}/.ruby_learner/workshop"
7
- stdout, stderr, status = Open3.capture3("ruby #{workshop}/lib/workplace.rb #{workshop}/lib/for-read.txt")
8
- expect { puts stdout }.to output("このファイルはファイル読み込み用の練習ファイルです。\n\nむかしむかし、あるところに、おじいさんとおばあさんが住んでいました。\nおじいさんは山へしばかりに、おばあさんは川へせんたくに行きました。\nおばあさんが川でせんたくをしていると、ドンブラコ、ドンブラコと、大きな桃が流れてきました。\n").to_stdout
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-file-open.rb
3
- filename = ARGV[0]
4
- file = File.open(filename)
5
- file.each_line do |line|
6
- print line
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つの文字列を受け取り、文字列と一致するファイル名のテキストデータを1行ずつ読み取り、表示するプログラムを作成せよ。
1
+ -課題-
2
+ キーボードからの標準入力で文字列を取得後,得られた文字列の中に0個以上の複数の「A」の後に「D」が含まれている場合は「match A*B.」をputsで出力せよ.また含まれない場合は,putsを用いて「not match.」を出力せよ.
2
3
 
4
+ * 文字列のマッチングの確認
5
+ - 使用方法...正規表現 =~ 文字列 (ifメソッドの条件式等に使用することがあります.)
6
+ - 機能...マッチしない場合にnilを,マッチする場合には文字列の中で,そのマッチする文字列が始まる文字の位置を返します.
3
7
 
4
- - file.each_line
8
+ * 正規表現
9
+ - 正規表現とは文字列とマッチングを行うパターンの記法のことです.
5
10
 
6
- file = File.open(ファイル名)
7
- file.each_line do |変数|
8
- 繰り返したい処理
9
- end
10
- file.close
11
+ ** /文字/
12
+ - 使用例.../ABC/
13
+ - 機能...//内の文字が文字列に含まれているかどうか.
11
14
 
12
- each_lineメソッドはファイルの各行をそれぞれ処理するメソッド。
13
- ファイルを1行ずつ読み込み、処理を繰り返す。
15
+ ** /^文字/
16
+ - 使用例.../^ABC/
17
+ - 機能.../^ /内の文字が文字列の先頭から始まっているかどうか.
14
18
 
15
- open,closeメソッドはそれぞれファイルを読み込むためにファイルを開くメソッド、開いたファイルを閉じるメソッド。
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
- RSpec.describe "ARGV-check" do
5
- it 'given "for-read.txt", return 4' do
6
- workshop = "#{ENV['HOME']}/.ruby_learner/workshop"
7
- stdout, stderr, status = Open3.capture3("ruby #{workshop}/lib/workplace.rb #{workshop}/lib/for-read.txt")
8
- expect { puts stdout }.to output("このファイルはファイル読み込み用の練習ファイルです。\n\nむかしむかし、あるところに、おじいさんとおばあさんが住んでいました。\nおじいさんは山へしばかりに、おばあさんは川へせんたくに行きました。\nおばあさんが川でせんたくをしていると、ドンブラコ、ドンブラコと、大きな桃が流れてきました。\n").to_stdout
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-pattern.rb
3
- pattern = Regexp.new(ARGV[0])
4
- filename = ARGV[1]
2
+ # 9-3-regular-exp.rb
3
+ str = STDIN.gets.chomp
4
+ regular_exp = /^[A-Z][0-9]/ =~ str
5
5
 
6
- file = File.open(filename)
7
- file.each_line do |line|
8
- if pattern =~ line
9
- print line
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
- 2つの文字列を受け取り、2つ目の文字列に一致するファイル名のテキストデータの各行から、1つ目の文字列にマッチする行を出力するプログラムを作成せよ。
1
+ -課題-
2
+ キーボードからの標準入力で文字列を取得後,得られた文字列の先頭に「A~Z」,その次が「0~9」が含まれている場合は「match.」をputsで出力せよ.また含まれない場合は,putsを用いて「not match.」を出力せよ.
2
3
 
4
+ * 文字列のマッチングの確認
5
+ - 使用方法...正規表現 =~ 文字列 (ifメソッドの条件式等に使用することがあります.)
6
+ - 機能...マッチしない場合にnilを,マッチする場合には文字列の中で,そのマッチする文字列が始まる文字の位置を返します.
3
7
 
4
- - Regexp.new
8
+ * 正規表現
9
+ - 正規表現とは文字列とマッチングを行うパターンの記法のことです.
5
10
 
6
- 変数名 = Regexp(文字列)
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
+ - 「|」を用いることで,いくつかの候補の中からどれか一つに当てはまるものにマッチする,というパターンを書くこともできます.