- Home ›
- Ruby正規表現の使い方 ›
- 複数の候補から選択 ›
- HERE
選択に対する繰り返し
メタ文字の「*」や「+」は選択に対しても適用することができます。よって、候補のいずれかが繰り返し現れる正規表現を定義することが可能です。(繰り返しに関しては「任意の文字と繰り返し(量指定子)」を参照して下さい)。
/(候補1|候補2|..)繰り返しを表すメタ文字/
具体的な例で考えて見ます。
/(Good|Bad)+/
メタ文字「+」は直前の文字又はグループを1回以上繰り返す場合にマッチします。その為正規表現全体としては「+」の対象が選択であるため、「Good」か「Bad」のいずれかが1回以上繰り返す場合にマッチすることになります。
この時注意して頂きたいのは候補である「Good」か「Bad」のどちらか1つだけが1回以上繰り返されるのではなく、繰り返されるのは「Good」でも「Bad」でもどちらでもいいということです。つまり「GoodGoodGood」や「BadBad」だけではなく「GoodBadGood」も「BadBadGoodGood」もマッチします。
マッチするもの:
Good Bad GoodGoodGood BadGoodBadGood GoodBadBadBadGood
このように選択に対して繰り返しのメタ文字を指定することで、選択の中の同じ候補が繰り返されるだけではなく、複数の候補のいずれかが繰り返し現れる場合にマッチする正規表現オブジェクトを作成することが出来ます。
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! ruby -Ku require "kconv" def check(str) if /No(0|1|2|3|4|5|6|7|8|9)+ is/ =~ str then print(Kconv.tosjis("○") + str + "¥n") else print(Kconv.tosjis("×") + str + "¥n") end end print(Kconv.tosjis("No(0|1|2|3|4|5|6|7|8|9)+ is にマッチするかどうか¥n¥n")) check("No01 is Yamada") check("No12506 is Honda") check("No.01 is Kuroda") check("No12.5 is Endou")
上記のプログラムを「test2-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。
( Written by Tatsuo Ikura )