メタ文字「|」:複数の選択肢の中のいずれかにマッチする

メタ文字の 1 つである「|」を使用すると、複数の文字列の選択肢の中のいずれかにマッチします。いくつかの文字列を列挙して、どれか一つと一致するかどうかを調べたい場合に利用できます。ここでは Perl の正規表現で、複数の選択肢のいずれかにマッチするメタ文字「|」の使い方について解説します。

(Last modified: )

メタ文字「|」の使い方

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

具体的な例として "Fri", "Sat", "Sun" のいずれかにマッチする正規表現は次のように記述します。

/Fri|Sat|Sun/

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

また複数の選択肢を記述する時に、他の文字列などと組み合わせて使う場合はどの部分が選択肢なのかが分かるようにする必要があります。次の例を見てください。

/Today is Fri|Sat|Sun/

今回は "Today id Fri", "Today id Sat", "Today id Sun" のいずれかにマッチする正規表現を記述しようとしましたが、実際には "Today id Fri", "Sat", "Sun" のいずれかにマッチする正規表現となってしまいます。どこからどこまでが選択肢なのか分からないためです。

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

/Today is (Fri|Sat|Sun)/

これで "Today id Fri", "Today id Sat", "Today id Sun" のいずれかにマッチする正規表現となりました。

サンプルコード

それでは簡単なサンプルを作成します。

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

&check("Today is Fri");
&check("Today is Sun");
&check("Today is Thu");
&check("Tomorrow is Sun");

sub check{
  if ($_[0] =~ /Today is (Fri|Sat|Sun)/){
    print $_[0]." は /Today is (Fri|Sat|Sun)/ にマッチします。\n";
  }else{
    print $_[0]." は /Today is (Fri|Sat|Sun)/ にマッチしません。\n";
  }
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

メタ文字「|」:複数の選択肢の中のいずれかにマッチする(1)

複数の選択肢のいずれかにマッチするパターンを作成し、いくつかの文字列がマッチするかどうか確認して結果を画面に表示しました。

-- --

Perl の正規表現で、複数の選択肢のいずれかにマッチするメタ文字「|」の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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