グループ化して複数の文字をメタ文字の対象にする

メタ文字の「*」「+」「?」「{min,max}」のような繰り返しのメタ文字を使用する場合、対象はメタ文字の直前の一文字でした。複数の文字を対象として繰り返しのパターンを作成するには、括弧()を使って複数の文字をグループ化することで、複数の文字を対象とした繰り返し回数などを指定することができます。ここでは Perl の正規表現でグループ化して複数の文字をメタ文字の対象にする方法について解説します。

(Last modified: )

複数の文字をグループ化する

複数の文字を繰り返しを表すメタ文字の対象にするには、複数の文字を () で囲みグループにします。記述方法は次のようになります。

(複数の文字)メタ文字

例えば "woo" と言う 3 つの文字が 1 回以上繰り返されて現れた場合にマッチする正規表現は次の通りです。

/a(woo)+b/

上記の場合、 ( から ) で囲まれた間に書かれた文字が 1 つのグループとなります。そしてメタ文字の + は直前にある文字が 1 回以上繰り返された場合にマッチしますが、今回は直前の文字がグループなのでグループの中の複数の文字が 1 回以上繰り返された場合にマッチします。

〇 awoob
〇 awoowoob
〇 awoowoowoob

このように () で複数の文字囲ったあとにメタ文字を記述することで、メタ文字の対象が直前の文字ではなく直前にある () で囲まれた複数の文字となります。

サンプルコード

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

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

&check("Hpy");
&check("Happy");
&check("Hapappy");
&check("Hapapappy");
&check("Happpy");
&check("Haaappy");

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

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

perl sample.pl

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

グループ化して複数の文字をメタ文字の対象にする(1)

今回は括弧 () を使って複数の文字をグループ化し、グループ化した文字列を対象に繰り返しのメタ文字を使ったパターンを作成しました。複数の文字列がパターンとマッチするかどうか調べて、結果を画面に表示しています。

-- --

Perl の正規表現でグループ化して複数の文字をメタ文字の対象にする方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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