メタ文字「*」:直前の文字を0回以上繰り返す場合にマッチする

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

(Last modified: )

メタ文字「*」の使い方

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

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

/Ha*ppy/

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

〇 Hppy
〇 Happy
〇 Haappy
〇 Haaaaappy
× Hbppy
× Habppy

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

サンプルコード

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

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("Haaaaappy");
&check("Hbppy");
&check("Habppy");

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

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

perl sample.pl

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

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

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

-- --

Perl の正規表現で、アスタリスクの前にある文字が 0 回以上繰り返したものにマッチするメタ文字「*」の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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