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

広告

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

m/パターン/x

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

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

/((¥d+)(yen))/

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

/(
   (¥d+)
   (yen)
 )/x

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

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

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

なお文字クラス内を除き空白は無視されてしまいますので、パターン内で空白を使用する場合は「¥ 」のようにエスケープを行います。またコメントを表す「#」をパターン内で使用したい場合は同じく「¥#」のようにエスケープを行います。

サンプルプログラム

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

test3-1.pl

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

print "パターン「/((¥d+)(yen))/」に対する結果¥n¥n";

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

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

  if ($str =~ 
    /(
       (
         ¥d   #任意の数字
         +    #1回以上繰り返し
       )
       (
         yen  #yenで終わる
       )
     )
    /x){
    print "○:$str¥n";
  }else{
    print "×:$str¥n";
  }
}

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

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

( Written by Tatsuo Ikura )