文字列の先頭(^)

広告

指定したパターンが文字列の先頭にある場合だけマッチするようにするにはメタ文字の1つである「^」を使います。(メタ文字とはパターンの中で記述可能な特別な意味を持つ文字のことです)。

書式は次の通りです。

/^パターン/

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

my $str = "feabc";

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

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

my $str = "feabc";

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

メタ文字「^」を使用することで文字列の先頭から指定した文字が含まれている場合だけマッチさせるパターンを記述することが出来ます。

メタ文字「^」

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

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

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

メタ文字「^」は先頭の文字ではなく文字列の先頭を表すものですので、あらゆる文字列にマッチします。なぜならば全ての文字列には文字列の先頭があるためです。

サンプルプログラム

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

test1-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」を含みます¥n";
}else{
  print "文字列の先頭に「home」を含みません¥n";
}

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

文字列の先頭(^)

( Written by Tatsuo Ikura )