指定の文字から始まり指定の文字で終わるパターンを作成する

正規表現のパターンの中ではメタ文字は一つだけではなく複数のメタ文字を組み合わせて指定することができます。例えば文字列の先頭とマッチする「^」と文字列の末尾とマッチする「$」の両方をパターンの中に記述することもできます。ここでは Perl の正規表現で指定の文字から始まり指定の文字で終わるパターンを作成する方法を解説します。

(Last modified: )

先頭と末尾にマッチするパターンを作成する

パターンの中でメタ文字は単独で使用するだけではなく複数のメタ文字を組み合わせることができます。例として文字列の先頭にマッチする ^ と文字列の末尾にマッチする $ を合わせて使ってみます。

/^パターン$/

メタ文字を除くパターン部分が単純な文字列だった場合、文字列の先頭から始まり文字列の末尾で終わっていることになりますので、結果的にパターン部分で指定した文字列と完全に一致する場合にだけマッチします。

例えば "/^blue$/" というパターンを考えてみます。

/^blue$/

このパターンは文字列の先頭から "blue" で始まり、そのあと文字列の末尾になる文字列とマッチします。よって "blue" とだけマッチします。

〇 blue
× bluebell
× skyblue

もう一つ "/^a.+e$/" というパターンを考えてみます。

/^a.+e$/

このパターンの中にある .+ も特別な意味を持つメタ文字です。これは任意の文字が 1 文字以上続く場合にマッチします。よってこのパターンは文字列の先頭から "a" で始まり、任意の文字が 1 文字以上続き、文字列の末尾の直前が "e" で終わる文字列とマッチします。

〇 airplane
〇 able
× around
× cute

このように ^$ を組み合わせて使用することで、指定した文字列と完全に一致する文字列とマッチするパターンや、特定の文字で始まり特定の文字で終わるような文字列とマッチするパターンを作成することができます。

※ メタ文字の .+ については別のページで詳しく解説します。

サンプルコード

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

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

my $str1 = "blue";
my $str2 = "bluebell";

if ($str1 =~ /^blue$/){
  print $str1."は /^blue\$/ とマッチします\n";
}else{
  print $str1."は /^blue\$/ とマッチしません\n";
}

if ($str2 =~ /^blue$/){
  print $str2."は /^blue\$/ とマッチします\n";
}else{
  print $str2."は /^blue\$/ とマッチしません\n";
}

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

perl sample.pl

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

指定の文字から始まり指定の文字で終わるパターンを作成する(1)

メタ文字の ^$ の両方が含まれるパターンを作成し、 2 つの文字列とマッチするかどうか調べて結果を画面に出力しました。

-- --

Perl の正規表現で指定の文字から始まり指定の文字で終わるパターンを作成する方法を解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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