文字クラスで連続した文字を範囲で指定する

文字クラスではマッチさせたい文字をすべて列挙しますが、例えば数字の 0 から 9 や文字の a から z などのように連続した文字を指定する場合にはメタ文字のハイフン「-」を使い 0-9 や a-z のように記述できます。ここでは Perl の正規表現で文字クラスを使用するときに連続した文字を指定する方法について解説します。

(Last modified: )

文字クラスで連続した文字を指定する

文字クラスでは候補の文字を列挙しますが、 0 から 9 や A から Z など連続する文字を指定する場合はハイフン( - )を使って簡潔に記述することができます。

例として "0" から "9" までの文字を文字クラスの中で指定する場合には次のように記述できます。

/[0-9]/

ブラケット( [] )の中でハイフン( - )を使用した場合だけハイフンはメタ文字としての意味を持ち、ハイフンの左側から右側までの連続した文字を記述した場合と同じです。よって上記は次のように記述した場合と同じです。

/[0123456789]/

アルファベットの "a" から "z" までをすべて文字クラスの中で指定する場合は次のどちらの記述方法でも同じ結果となります。

/[a-z]/
/[abcdefghijklmnopqrstuvwxyz]/

連続している範囲であれば "A" から "Z" までのような最初から最後まででなくても、例えば "D" から "R" までのような範囲でも問題ありません。次のどちらの記述方法でも同じ結果となります。

/[D-R]/
/[DEFGHIJKLMNOPQR]/

文字クラスの中で範囲を表す指定に加えて、他の文字を追加で記述することもできます。例えば "A" から "G" までと "X" と "Z" だった場合は次のどちらの記述方法でも同じ結果となります。

/[A-GXZ]/
/[ABCDEFGXZ]/

範囲を複数指定する

文字クラスで範囲を指定する場合、同じ文字クラス内に複数記述することができます。例として "0" から "9" 、 "a" から "z" 、 "A" から "Z" をすべて指定するには次のように記述します。

/[0-9a-zA-Z]/

範囲を記述する順番も関係ありませんので、[A-Z0-9a-z]のように記述しても同じです。

サンプルコード

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

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

&check("2000");
&check("2003");
&check("2006");
&check("2007");
&check("2010");

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

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

perl sample.pl

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

文字クラスで連続した文字を範囲で指定する(1)

文字クラスで範囲を使って文字を指定したパターンを作成し、複数の文字列とマッチするかどうか調べ結果を画面に表示しました。

-- --

Perl の正規表現で文字クラスを使用するときに連続した文字を指定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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