選択肢全体を繰り返すパターンを作成する

選択肢を表すメタ文字の「|」と繰り返しを表すメタ文字「+」などを組み合わせることで、選択肢全体を繰り返すパターンを作成することができます。ここでは Perl の正規表現でメタ文字の「|」と繰り返しのメタ文字を組み合わせて選択肢全体を繰り返すパターンを作成する方法について解説します。

(Last modified: )

選択肢全体を繰り返す

メタ文字の *+ は直前の文字を繰り返す文字列にマッチしますが、直前の文字としてメタ文字の | を使った選択肢を記述することで、選択肢全体に対しても適用することができます。

次の例を見てください。

/code_(AB|XY)/

上記の場合は "code_AB" または "code_XY" のいずれかに一致する場合にマッチします。これに 1 回以上繰り返しが行われる場合にマッチするメタ文字 + を付け加えてみます。

/code_(AB|XY)+/

今度の場合、選択肢 (AB|XY) に対してメタ文字 + が有効となりますので、 "AB" または "XY" のどちらかが 1 回以上繰り返されている場合にマッチすることになります。

例えば次のような文字列がマッチします。

〇 code_AB
〇 code_XY
〇 code_ABAB
〇 code_XYABXY

このように選択肢と繰り返しを組み合わせることで、同じ選択肢が繰り返されるだけではなく、複数の選択肢のどれかが繰り返し現れる場合にマッチする正規表現を記述することができます。

サンプルコード

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

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

&check("code_AB");
&check("code_XYAB");
&check("code_ABABAB");
&check("code_AX");

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

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

perl sample.pl

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

選択肢全体を繰り返すパターンを作成する(1)

選択肢全体を繰り返すパターンを作成し、色々な文字列とマッチするかどうか調べ結果を画面に表示しました。

-- --

Perl の正規表現でメタ文字の「|」と繰り返しのメタ文字を組み合わせて選択肢全体を繰り返すパターンを作成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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