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 @@ + + + + + + 正規表現説明シート + + + + + + + + + + + +
+

正規表現教材

+
+
    + +
  1. 正規表現について
  2. +
    + +
  3. 正規表現のメタ文字について
  4. +
    + +
  5. 例題プログラム
  6. +
    +
+
+ +
+

正規表現について

+

データから文字・文字列を検索するときにそれらのパターンを指定する一般的な表現方法を正規表現といいます。
+ 調べたい文字・文字列が正規表現によってすぐに検索することができます。

+ 例えば、i(小文字)が含まれる文字・文字列の場合以下のように検索されます。
+ :i, programming, Application(小文字のiが含まれるので検索される。)
+ ×:I, Image(大文字のIなので検索されない。)

+

moji.csv

+
+

moji
+ i
+ programming
+ Application
+ I
+ Image

+
+

kensaku1.rb

+
+

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空白文字以外
\d0〜9の数字
\D0〜9の数字以外
+
+ +

主なメタ文字のマッチ例一覧

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
メタ文字正規表現マッチするマッチしない
./o.k/bookback
*/.*on/nipponjapan
+/-+/o-------ioi
?/ts?u/tsu, tusu
文字列1|文字列2/cat|dog/cat, dogfox
\/\+/10+110-1
\s/e\sa/We areWeare
\S/a\Su/aisatuaisa tu
\d/\dsai/15saijuugosai
\D\/Dsai/Juugosai15sai
+
+
+ +
+

例題プログラム

+

kensaku.csv

+
+

name,gakko,gakunen,kozukai
+ 公益太郎,三川八中,2,2000
+ 飯森花子,余目百中,1,4000
+ 鶴岡一人,タキタロウ小,4,200
+ 鶴岡二子,タキタロウ小,2,300
+ 遊佐梅子,丸池小,6,900

+
+ +

kensaku2.rb

+
+

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
+

+
+
+ +

+ 正規表現を使ったプログラムを作成してみよう!!

+ +
+ + + + + \ No newline at end of file diff --git a/info/index.html b/info/index.html index b7ebb89..555a4a3 100644 --- a/info/index.html +++ b/info/index.html @@ -32,6 +32,7 @@
  • Zoom音声トラブルの際はこちら
  • JD説明シート
  • CSV説明シート
  • +
  • 正規表現説明シート
  • koeki MAILの使い方
  • ZOOMの更新方法