直前の文字を0回以上繰り返し(*)

広告

メタ文字の1つであるアスタリスク(*)をパターンの中に記述すると、アスタリスクの前にある文字が0回以上繰り返したものにマッチします。0回と言うのは対象の直前の文字が存在しない場合です。

例えば次のように記述します。

/Go*gle/

上記の場合、アスタリスク(*)は直前の文字(今回は「o」)に0回以上繰り返したものにマッチします。0回以上というのは「o」が無い場合と「o」や「oooo」など「o」が1回以上繰り返されている文字マッチするということになります。(直前の文字が無い場合は、空文字にマッチしていることになります)。

マッチするもの:

Ggle
Gogle
Google
Gooogle
Goooogle
Gooooogle

0回も含まれる点に注意して下さい。

サンプルプログラム

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

test2-1.pl

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

print "「Go*gle」にマッチするかどうか¥n¥n";

&check("Ggle");
&check("Gogle");
&check("Google");
&check("Goooooogle");
&check("Gmgle");
&check("Gomogle");

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

  if ($str =~ /Go*gle/){
    print "○:$str¥n";
  }else{
    print "×:$str¥n";
  }
}

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

直前の文字を0回以上繰り返し(*)

( Written by Tatsuo Ikura )