パターンの中の空白やコメントを無視する(「/x」修飾子)

オプション修飾子の一つである「/x」を設定すると、パターンが対象の文字列にマッチするかどうか調べるときにパターンの中の空白やコメントを無視するようになります。ここでは Perl の正規表現で使用する「/x」修飾子の使い方について解説します。

(Last modified: )

「/x」修飾子の使い方

パターンに /x 修飾子を指定するとパターンの中に記述された空白やコメントが無視されます。書式は次の通りです。

m/パターン/x

/x 修飾子は複雑なパターンを分解して見やすく記述したり、コメントを記述したい場合に使われます。

次のようなパターンを例として考えてみます。

/((\d+)(yen))/

同じパターンに対して /x 修飾子を指定した場合、パターン内の空白や改行は無視されるため次のようにパターンの中に空白や改行を追加して記述することができます。

/(
   (\d+)
   (yen)
 )/x

またパターン内のコメントも無視されるため(「#」から行末までがコメント)、次のようにコメントを記述しておくことができます。

/(
   (\d+)    #任意の数字を1回以上繰り返し
   (yen)    #yenで終わる
 )/x

このように /x 修飾子はパターンを見やすくしたり、パターン内の構成要素に対してコメントを記述しておく場合に使用されます。見た目だけの変更ですのでパターンにマッチするかどうかは違いがありません。

なお /x 修飾子を指定した場合は文字クラス内を除き空白は無視されてしまいますので、パターン内で空白を使用する場合は \ のようにエスケープを行います。またコメントを表す "#" をパターン内で使用したい場合も \# のようにエスケープを行います。

サンプルコード

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

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

&check("2000yen");
&check("380yen");
&check("920dollar");

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

  if ($str =~ 
    /(
       (
         \d   #任意の数字
         +    #1回以上繰り返し
       )
       (
         yen  #yenで終わる
       )
     )
    /x){
    print "$str は /((\\d+)(yen))/ パターンにマッチします。\n";
  }else{
    print "$str は /((\\d+)(yen))/ パターンにマッチしません。\n";
  }
}

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

perl sample.pl

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

パターンの中の空白やコメントを無視する(1)

パターンに「/x」修飾子を付けることで、パターの中の空白や改行、コメントなどが無視されてマッチするかどうか調べるようになりました。

-- --

Perl の正規表現で使用する「/x」修飾子の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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