列挙した文字の一つとマッチする(文字クラス)

文字クラスと呼ばれる記述方法を行うと、複数の文字のいずれか一つとマッチさせるパターンを記述できます。ここでは Perl の正規表現で、文字クラスを使って列挙した文字のいずれか一つとマッチするパターンの記述方法について解説します。

(Last modified: )

文字クラスの使い方

マッチさせたい文字をすべて列挙し、いずれか一つの文字にマッチするパターンを作成するには文字クラスを使用します。

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

/[ABC]/

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

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

/199[6789]/

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

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

文字クラスと選択肢「|」の違い

文字クラスを使ったパターンは選択肢を表すメタ文字の | を使っても記述することができます。

/199[6789]/
/199(6|7|8|9)/

メタ文字の | の場合は選択肢と選択肢の間に | が必要ですが、文字クラスの場合は文字列ではなくいずれかの文字なので区切り文字は不要のため単に列挙するだけで構いません。マッチさせる候補が一文字単位でよければ文字クラスを使った方が簡潔に記述できます。

また文字クラスの場合、連続した文字をまとめて指定する方法も用意されています。詳しくは「文字クラスで連続した文字を指定する」を参照されてください。

サンプルコード

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

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

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

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

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

perl sample.pl

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

列挙した文字の一つとマッチする(文字クラス)(1)

文字クラスを使って列挙したいずれかの文字とマッチするパターンを作成し、複数の文字列がマッチするかどうかを試して結果を画面に出力しました。

-- --

Perl の正規表現で、文字クラスを使って列挙した文字のいずれか一つとマッチするパターンの記述方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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