任意の一文字(.)

広告

メタ文字の1つであるドット(.)をパターンの中に記述すると改行(¥n)を除く任意の一文字にマッチします。

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

/ab.cd/

上記の場合、ドット(.)は任意の一文字にマッチしますので「abfcd」や「ab0cd」などドット(.)が記述された位置にどんな文字が書かれている場合もマッチすることになります。

注意する点としては任意の一文字ですので必ず一文字必要です。よって「ab」と「cd」の間に文字が無いような「abcd」や2つ以上の文字が含まれるような「abloocd」はマッチしません。

マッチするもの:

abhcd
ab4cd
ab#cd

マッチしないもの:

abcd
abppcd

メタ文字「.」は何個でも使いことができます。

/ab..cd/

この場合は「ab」と「cd」の間に任意の二文字がある文字列にマッチします。(例:abomcdd)。

/a.b.c.d/

この場合は「a」「b」「c」「d」の各文字の間に1つずつ任意の文字がある文字列にマッチします。(例:a1b2c3d)。

改行文字の扱い

メタ文字「.」は任意の一文字にマッチします。これはアルファベットや数字だけではなくタブである「¥t」などでもマッチしますが、改行である「¥n」だけはマッチしません。

そこでパターンの中で単独で「^」を記述する場合を考えてみます。

my $str = "a¥n";

if ($str =~ /a./){
  # ...
}

例えば上記のような場合にはマッチしませんので注意して下さい。改行もマッチするようにするには「メタ文字(.)が改行にマッチ(「/s」修飾子)」を参照して下さい。

サンプルプログラム

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

test1-1.pl

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

print "「ab.cd」にマッチするかどうか¥n¥n";

&check("ab6cd");
&check("abycd");
&check("ab¥tcd");
&check("ab¥ncd");
&check("abcd");
&check("abpocd");

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

  if ($str =~ /ab.cd/){
    print "○:$str¥n";
  }else{
    print "×:$str¥n";
  }
}

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

任意の一文字(.)

( Written by Tatsuo Ikura )