複数の文字列のどれかにマッチする(|)

いくつかの候補となる文字列を列挙し、そのいずれか一致する場合にマッチするパターンを記述することができます。ここでは Ruby の正規表現で複数の文字列のどれかにマッチする「|」の使い方について解説します。

(Last modified: )

複数の文字列のどれかにマッチする

いくつかの候補となる文字列を列挙し、そのいずれか一致する場合にマッチするパターンを記述するには | を使用します。書式は次の通りです。

/候補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」のいずれかに一致する場合にマッチする正規表現オブジェクトとなりました。

サンプルコード

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

# encoding: UTF-8

def check(str)
  if /(red|blue|green)/ =~ str then
    puts("○" + str)
  else
    puts("×" + str)
  end
end

puts("(red|blue|green) にマッチするかどうか")

check("color is red")
check("green green")
check("yellow page")

下記のように実行して下さい。

候補から選択(|)

-- --

Ruby の正規表現で複数の文字列のどれかにマッチする「|」の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。