文字クラスの否定

広告

文字クラスはマッチする文字を全て列挙しますが、列挙した文字以外の場合にマッチさせることも可能です。このような場合にはメタ文字の「^」を使います。

例として「0から9」までの文字以外の文字にマッチさせたい場合には次のように記述できます。

/[^0-9]/

文字クラスを定義するブラケット([])の中で、「[」の直後に「^」が記述された場合にそれ以降に列挙された文字を否定する役割を持ちます。もしも「[」の直後以外に記述された場合は単なる「^」と言う文字となります。

/[0-9^ab]/

上記の場合は「0から9」「^」「a」「b」のいずれかにマッチする文字クラスとなります。

否定が使用された場合は、それ以降に書かれた文字を全て否定することになります。

/[^a-zA-Z]/

上記では「a-z」「A-Z」以外の文字にマッチします。

また「^」は文字列の先頭にマッチするメタ文字としても使用されていますが、文字クラスの[]の中で使用された場合だけは今回ご説明している否定を意味するメタ文字となりますので注意して下さい。

サンプルプログラム

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

test3-1.pl

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

print "「200[^a-zA-Z]」にマッチするかどうか¥n¥n";

&check("200");
&check("2001");
&check("2005");
&check("2010");
&check("200x");
&check("200X");
&check("200#");

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

  if ($str =~ /200[^a-zA-Z]/){
    print "○:$str¥n";
  }else{
    print "×:$str¥n";
  }
}

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

文字クラスの否定

( Written by Tatsuo Ikura )