メタ文字「\b」:単語の先頭および末尾にマッチする

指定したパターンが単語の先頭や末尾にある場合にだけマッチさせるにはメタ文字の 1 つである「\b」を使います。ここでは Perl の正規表現で単語の先頭および末尾にマッチするメタ文字「\b」の使い方について解説します。

(Last modified: )

メタ文字「\b」の使い方

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

書式は次の通りです。

/\bパターン/
/パターン\b/

単語の先頭や末尾というのは例えば "Long time no see" という文字列の場合は次のアンダーバー(_)の位置にマッチします。

_Long_ _time_ _no_ _see_

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

〇 icebox
〇 square box

これに対してパターンを "/\bbox/" と記述した場合は、 "\b" の部分が単語の先頭または末尾とマッチします。そのため "/\bbox/" は "box" が単語の先頭または末尾のあとにある場合だけマッチします。よって "square box" はマッチしますが "icebox" はマッチしません。

× icebox
〇 square box

メタ文字 $ を使用することで指定した文字のあとに文字列の末尾がくる場合だけマッチさせるパターンを記述することができます。

サンプルコード

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

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

my $str1 = "icebox";
my $str2 = "square box";

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

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

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

perl sample.pl

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

単語の先頭および末尾にマッチする(1)

単語の先頭または末尾の位置とマッチする \b が含まれるパターンが、 2 つの文字列とマッチするかどうかそれぞれ試して結果を画面に表示しました。

-- --

Perl の正規表現で単語の先頭および末尾にマッチするメタ文字「\b」の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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