列挙した文字の一つ

広告

マッチさせたい文字を全て列挙し、いずれか一つの文字にマッチする正規表現を作成します。

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

/[ABC]/

マッチさせたい文字を並べて記述し、全体をブラケット([])(角括弧とも言う)で囲います。この角括弧で囲まれた中に対象の文字を列挙したものを文字クラスと呼びます。

一文字だけのマッチですので単独で使用することはあまりなく、次のように他の文字などと組み合わせて使用します。

/199[6789]/

上記では「1996」「1997」「1998」「1999」のいずれかにマッチします。

またこれは選択を使って次のように記述した場合と同じです。

/199(6|7|8|9)/

選択の場合は選択肢の間に縦棒(|)が必要ですが文字クラスの場合には文字と文字の間に区切りは不用です。その代わり選択の場合は複数の文字を組み合わせて選択肢に出来ますが、文字クラスではマッチさせる候補は一文字単位でしか指定できません。

なお文字クラスの中で記述する文字の順番は関係ありません。「[6789]」でも「[9786]」でも同じ結果となります。

サンプルプログラム

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

test1-1.pl

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

print "「199[6789]」にマッチするかどうか¥n¥n";

&check("199");
&check("1995");
&check("1996");
&check("1997");
&check("1998");
&check("1999");
&check("2000");

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

  if ($str =~ /199[6789]/){
    print "○:$str¥n";
  }else{
    print "×:$str¥n";
  }
}

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

列挙した文字の一つ

( Written by Tatsuo Ikura )