文字列の末尾($)

広告

指定したパターンが文字列の末尾にある場合だけマッチするようにするにはメタ文字の1つである「$」を使います。

書式は次の通りです。

/パターン$/

具体的な例で考えてみます。「abcdef」と「feabc」と言う2つの文字列に対してパターンを「/abc/」と指定した場合にはどちらの文字列にも「abc」は含まれているため、どちらもマッチします。

my $str = "abcdef";

if ($str =~ /abc/){
  print "文字列に「abc」を含みます¥n";
}

これに対してパターンを「/abc$/」と記述した場合は、文字列の末尾に「abc」がある場合だけマッチします。よって「feabc」はマッチしますが「abcdef」はマッチしません。

my $str = "abcdef";

if ($str =~ /abc$/){
  print "文字列の最後に「abc」を含みます¥n";
}

メタ文字「$」を使用することで文字列の最後の位置に指定した文字が含まれている場合だけマッチさせるパターンを記述することが出来ます。

メタ文字「$」

「$」は文字列の末尾を表しています。つまり「abc$」は「a」+「b」+「c」+「文字列の末尾」と言う4つの連続する単語から出来ているパターンと考える事が出来ます。

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

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

メタ文字「$」は先最後の文字ではなく文字列の末尾を表すものですので、あらゆる文字列にマッチします。なぜならば全ての文字列には文字列の末尾があるためです。これはメタ文字「^」の場合と同じです。

サンプルプログラム

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

test2-1.pl

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

my $str = "homepage";
print "対象:$str¥n";

if ($str =~ /home$/){
  print "文字列の最後に「home」を含みます¥n";
}else{
  print "文字列の最後に「home」を含みません¥n";
}

$str = "my home";
print "対象:$str¥n";

if ($str =~ /home$/){
  print "文字列のhomeに「home」を含みます¥n";
}else{
  print "文字列のhomeに「home」を含みません¥n";
}

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

文字列の末尾($)

( Written by Tatsuo Ikura )