メタ文字「.」:任意の一文字にマッチする/h1>

メタ文字の 1 つであるドット(.)をパターンの中に記述すると、改行(\n)を除く任意の一文字にマッチします。ここでは Perl の正規表現で、任意の一文字とマッチするメタ文字「.」の使い方について解説します。

(Last modified: )

メタ文字「.」の使い方

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

例えば次のようにパターンを考えてみます。

/ab.cd/

ドット( . )は任意の一文字にマッチしますので、 "ab" のあとに任意の一文字が続き、そのあとに "cd" が続く文字列とマッチします。

〇 abgcd
〇 ppab7cdqq

注意する点としては任意の一文字ですので必ず一文字必要です。よって "ab" と "cd" の間に文字がない "abcd" とはマッチしません。

× abcd

なおドット( . )はパターンの中で何個でも記述することができます。次のパターンを見てください。

/ab..cd/

この場合は "ab" のあとに任意の二文字が続き、そのあとに "cd" が続く文字列とマッチします。

〇 abxycd

改行文字の扱い

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

次の例を見てください。

my $str = "a\nb";

if ($str =~ /a./){
  print "マッチしました\n"
}

パターンは "/a./" ですので "a" のあとの任意の一文字が続く文字列とマッチします。ただ . は改行とはマッチしないので "a\nb" とはマッチしません。

※ オプション修飾子を設定することで、ドット . が改行にもマッチするようになります。詳しくは「メタ文字(.)が改行にマッチ(「/s」修飾子)」を参照して下さい。

サンプルコード

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

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

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

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

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

perl sample.pl

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

任意の一文字(.)にマッチする(1)

ドット( . )を含むパターンが色々な文字列にマッチするかどうかを試し、結果を画面に表示しています。

-- --

Perl の正規表現で、任意の一文字とマッチするメタ文字「.」の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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