メタ文字「{min,max}」:直前の文字を指定した範囲の回数繰り返す場合にマッチする

メタ文字の 1 つである {min,max} をパターンの中に記述すると、直前の文字が min 回数以上 max 回数以下だけ繰り返されたものにマッチします。 min と max の回数も含む点に注意してください。ここでは Perl の正規表現で、直前の文字が指定した範囲の回数繰り返されるものにマッチするメタ文字「{min,max}」の使い方について解説します。

(Last modified: )

メタ文字「{min,max}」の使い方

メタ文字の {min,max} を使用すると、直前の文字が指定した範囲の回数だけ繰り返される場合にマッチする正規表現を記述できます。

記述方法は次のようになります。

{min,max}

指定する範囲は min 及び max で指定します。例えば直前の文字が 2 回から 4 回の範囲で繰り返し現れる場合にマッチする場合は次のように記述します。

/Ha{2,4}ppy/

上記の場合、直前の文字(今回は "a" )が指定した範囲の 2 回から 4 回の間繰り返し現れた場合にマッチします。その為、今回の場合でマッチするのは "aa", "aaa", "aaaa" の場合です。

〇 Haappy
〇 Haaappy
〇 Haaaappy
× Hppy
× Happy
× Haaaaaappy

maxの指定を省略する

メタ文字の {min,max}max の部分の指定を省略すると、直前の文字が現れることができる上限が無くなります。

{min,}

カンマ(,)は省略しないで下さい。省略した場合は別の意味となります。

指定する範囲は min だけを指定します。例えば直前の文字が 2 回以上繰り返し現れる場合にマッチする場合は次のように記述します。

/Ha{2,}ppy/

上記の場合、直前の文字(今回は "a" )が 2 回以上繰り返し現れた場合にマッチします。その為、今回の場合でマッチするのは "aa", "aaa", "aaaaaaaa" などです。

〇 Haappy
〇 Haaappy
〇 Haaaaaaaaaappy
× Hppy
× Happy
× Habppy

回数を指定する

メタ文字 {min,max} の場合は直前の文字が min 回数以上 max 回数以下だけ繰り返された場合にマッチしますが、直前の文字が num 回数だけ繰り返された場合にマッチするように記述するには {num} のように記述してください。

{num}

例えば直前の文字が 2 回現れる場合にだけマッチする場合は次のように記述します。

/Ha{2}ppy/

上記の場合、直前の文字(今回は "a" )が 2 回現れた場合にマッチします。その為、今回の場合でマッチするのは "aa" だけです。

〇 Haappy
× Happy
× Haaappy
× Haaaaaaappy

メタ文字「*」「+」「?」との関係

今回のメタ文字 {min,max} を使うと、アスタリスク( * )、プラス( + )、クエスチョン( ? )のメタ文字と同じことをすることができます。

*   {0,}     直前の文字を0回以上繰り返し
+   {1,}     直前の文字を1回以上繰り返し
?   {0,1}    直前の文字が0回か1回

どちらの表記を使っても構いませんが、条件に合うのであれば *, +, ? のメタ文字を使用した方がコンパクトに記述することが可能です。

サンプルコード

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

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

&check("Hppy");
&check("Happy");
&check("Haappy");
&check("Haaappy");
&check("Haaaappy");
&check("Habppy");

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

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

perl sample.pl

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

メタ文字「{min,max}」:直前の文字を指定した範囲の回数繰り返す場合にマッチする(1)

メタ文字の {min,max} が含まれるパターンを作成し、色々な文字列とマッチするかどうか調べて結果を画面に出力しました。

-- --

Perl の正規表現で、直前の文字が指定した範囲の回数繰り返されるものにマッチするメタ文字「{min,max}」の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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