選択に対する繰り返し

広告

メタ文字の「*」や「+」は選択に対しても適用することができます。よって、候補のいずれかが繰り返し現れる正規表現を定義することが可能です。(繰り返しに関しては「任意の文字と繰り返し(量指定子)」を参照して下さい)。

/(候補1|候補2|..)繰り返しを表すメタ文字/

具体的な例で考えて見ます。

/(Good|Bad)+/

メタ文字「+」は直前の文字又はグループを1回以上繰り返す場合にマッチします。その為正規表現全体としては「+」の対象が選択であるため、「Good」か「Bad」のいずれかが1回以上繰り返す場合にマッチすることになります。

この時注意して頂きたいのは候補である「Good」か「Bad」のどちらか1つだけが1回以上繰り返されるのではなく、繰り返されるのは「Good」でも「Bad」でもどちらでもいいということです。つまり「GoodGoodGood」や「BadBad」だけではなく「GoodBadGood」も「BadBadGoodGood」もマッチします。

マッチするもの:

Good
Bad
GoodGoodGood
BadGoodBadGood
GoodBadBadBadGood

このように選択に対して繰り返しのメタ文字を指定することで、選択の中の同じ候補が繰り返されるだけではなく、複数の候補のいずれかが繰り返し現れる場合にマッチする正規表現オブジェクトを作成することが出来ます。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test2-1.rb

#! 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 )