diff --git a/info/Regular_expression.html b/info/Regular_expression.html new file mode 100644 index 0000000..b65e5bc --- /dev/null +++ b/info/Regular_expression.html @@ -0,0 +1,386 @@ + + + +
+ +データから文字・文字列を検索するときにそれらのパターンを指定する一般的な表現方法を正規表現といいます。
+ 調べたい文字・文字列が正規表現によってすぐに検索することができます。
+ 例えば、i(小文字)が含まれる文字・文字列の場合以下のように検索されます。
+ ○:i, programming, Application(小文字のiが含まれるので検索される。)
+ ×:I, Image(大文字のIなので検索されない。)
moji
+ i
+ programming
+ Application
+ I
+ Image
require 'csv'
+
+ data = CSV.read("moji.csv", headers: true)
+ data.each do |row|
+ if /i/ =~ row["moji"]
+ puts row["moji"]
+ end
+ end
+
プログラムの解説
+ 正規表現:/(スラッシュ)で囲みます。
+ =~:正規表現と文字列のマッチを行います。
文字・文字列以外に正規表現内で特殊な働きをする文字(メタ文字)で検索することができます。
+ 例えば
というようにメタ文字を組み合わせることで複雑なデータを検索することができます。
+ ※+と\dについては次の「主なメタ表一覧」を見て、マッチする文字列は何なのか、どのような例があるのか確認してみましょう。
++ ++
++ +メタ文字 +マッチする文字列 ++ +. +なんでもいい1文字(改行を含まない) ++ +* +直前の文字0回以上の繰り返し ++ ++ +直前の文字1回以上の繰り返し ++ +? +直前の文字0回もしくは1回の繰り返し ++ +文字列1|文字列2 +どちらかにマッチすれば良い ++ +\ +直後のメタ文字を文字としてマッチさせる ++ +\s +空白文字(スペース、タブ、改行など) ++ +\S +空白文字以外 ++ +\d +0〜9の数字 ++ +\D +0〜9の数字以外 +
+++
++ +メタ文字 +正規表現 +マッチする +マッチしない ++ +. +/o.k/ +book +back ++ +* +/.*on/ +nippon +japan ++ ++ +/-+/ +o-------i +oi ++ +? +/ts?u/ +tsu, tu +su ++ +文字列1|文字列2 +/cat|dog/ +cat, dog +fox ++ +\ +/\+/ +10+1 +10-1 ++ +\s +/e\sa/ +We are +Weare ++ +\S +/a\Su/ +aisatu +aisa tu ++ +\d +/\dsai/ +15sai +juugosai ++ +\D +\/Dsai/ +Juugosai +15sai +
name,gakko,gakunen,kozukai
+ 公益太郎,三川八中,2,2000
+ 飯森花子,余目百中,1,4000
+ 鶴岡一人,タキタロウ小,4,200
+ 鶴岡二子,タキタロウ小,2,300
+ 遊佐梅子,丸池小,6,900
require 'csv'
+
+ data = CSV.read("kensaku.csv", headers: true)
+ puts "学校で探す:1"
+ puts "金額で探す:2"
+ print "どれにしますか:"
+ sel = gets.to_i
+
+ if sel == 1
+ print "探したい学校名を入れてください:"
+ ptn = Regexp.new(gets.chomp)
+ #gets.chompで入力された文字列をRegexp.newにより正規表現に直す
+ data.each do |row|
+ if ptn =~ row["gakko"]
+ printf("%sさんは%s%s年です\n", row["name"], row["gakko"], row["gakunen"])
+ end
+ end
+ elsif sel == 2
+ print "絞り込みしたい金額を入れてください:"
+ gaku = gets.to_i
+ data.each do |row|
+ if gaku < row["gozukai"].to_i
+ printf("%sさんは%d円もらっています\n", row["name"], row["kozukai"].to_i)
+ #csvから読んできたデータは全部文字列
+ #数字で比較するときは.to_iや.to_fを使う
+ end
+ end
+ else
+ printf("%d番はありません。さようなら。\n", sel)
+ end
+
+ 正規表現を使ったプログラムを作成してみよう!!
+ +