複数の選択肢から一つ(|)

広告

複数の文字列を選択肢として記述し、いずれか一つに一致する場合にマッチする正規表現を作成します。

具体的な例として「Friday」「Saturday」「Sunday」のいずれかにマッチする正規表現は次のように記述します。

/Friday|Saturday|Sunday/

選択肢となる文字列をメタ文字である縦棒(|)で区切り、並べて記述します。3つ以上の選択肢がある場合は縦棒(|)をさらに追加し続けて記述して下さい。選択肢として記述された複数の文字列を左から順にマッチするかどうかをチェックされます。

また複数の選択肢を記述する時に、他の文字列などと組み合わせて使う場合を考えてみます。

/Today is Friday|Saturday|Sunday/

上記では「Today id Friday」「Today id Saturday」「Today id Sunday」のいずれかにマッチする正規表現を記述しようとしましたが、実際には「Today id Friday」「Saturday」「Sunday」のいずれかにマッチする正規表現となってしまいます。どこからどこまでが選択肢なのか分からないためです。

選択肢を他の部分と区別するためには、選択肢全体を括弧()で囲みます。

/Today is (Friday|Saturday|Sunday)/

これで「Today id Friday」「Today id Saturday」「Today id Sunday」のいずれかにマッチする正規表現となりました。

サンプルプログラム

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

test1-1.pl

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

print "「Today is (Friday|Saturday|Sunday)」にマッチするかどうか¥n¥n";

&check("Today is Friday");
&check("Today is Sunday");
&check("Today is Thursday");
&check("Tomorrow is Sunday");
&check("Saturday");

sub check{
  my ($str) = @_;

  if ($str =~ /Today is (Friday|Saturday|Sunday)/){
    print "○:$str¥n";
  }else{
    print "×:$str¥n";
  }
}

上記を「test1-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。

複数の選択肢から一つ(|)

( Written by Tatsuo Ikura )