- Home ›
- Ruby正規表現の使い方 ›
- 複数の候補から選択 ›
- HERE
候補から選択(|)
いくつかの候補となる文字列を列挙し、そのいずれか一致する場合にマッチするパターンの記述方法を確認します。書式は次の通りです。
/候補1|候補2|../
候補となる文字列をハイフン(|)で区切って続けて記述します。具体的な例として「Friday」「Saturday」「Sunday」のいずれかにマッチする正規表現は次のように記述します。
/Friday|Saturday|Sunday/
この場合、対象の文字列に「Friday」「Saturday」「Sunday」のいずれかの文字列が含まれていた場合にマッチすることになります。
マッチするもの:
Today is Friday Sunday Night
マッチしないもの:
Sun Tuesday
グループ化
選択を使用する場合に、他の文字などと組み合わせて使う場合は注意が必要です。次の例を見てください。
/border is red|RED|Red color/
これは「border is red color」「border is RED color」「border is Red color」のいずれかに一致する場合にマッチする正規表現オブジェクトのつもりでしたが、実際にマッチするのは「border is red」「RED」「Red color」のいずれかに一致する場合にマッチします。
これは候補の区切りがスペースなどではない為です。選択と他の文字やメタ文字などと組み合わせて使用する場合は選択全体を()で囲みグループ化して使用して下さい。
/(候補1|候補2|..)/
この場合は、「(」から「)」までの間に記述された中で、「|」で区切られた1つ1つの文字列が候補となります。先ほどの例は次のように記述することで意図したとおりの正規表現オブジェクトとなります。
/border is (red|RED|Red) color/
これで「border is red color」「border is RED color」「border is Red color」のいずれかに一致する場合にマッチする正規表現オブジェクトとなりました。
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! ruby -Ku require "kconv" def check(str) if /(red|blue|green)/ =~ str then print(Kconv.tosjis("○") + str + "¥n") else print(Kconv.tosjis("×") + str + "¥n") end end print(Kconv.tosjis("(red|blue|green) にマッチするかどうか¥n¥n")) check("color is red") check("green green") check("yellow page")
上記のプログラムを「test1-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。
( Written by Tatsuo Ikura )