- Home ›
- Perl入門 ›
- Perlにおける正規表現
パターンマッチ演算子の区切り文字にシングルクオーテーションを使った場合
パターン内で記述された変数や配列は、ダブルクオーテーションで囲われた文字列の中に記述された場合と同じく変数展開が行われますが、パターンマッチ演算子の区切りに文字としてシングルクオーテーションを使った場合は変数展開は行われません。ここでは Perl の正規表現でパターンマッチ演算子の区切りにシングルクオーテーションを使った場合について解説します。
(Last modified: )
区切り文字にシングルクオーテーションを使った場合
正規表現でパターンを記述するときは、パターンマッチ演算子を使います。デフォルトでは区切り文字は "/" ですが、別の文字を使用することもできます。(パターンマッチ演算子について詳しくは「パターンマッチ演算子(m//)」を参照されてください)。
m/パターン/ m!パターン! m@パターン@
なお区切り文字が "/" の場合は "m" を省略して次のように記述できます。
/パターン/
区切り文字としてシングルクオーテーション(')を使用することもできますが、シングルクオーテーションを使った場合は変数展開が行われないので注意が必要です。
m'パターン'
次の例を見て下さい。パターンの区切り文字として "/" を使用しています。
my $pat = "And"; my $str = "RedAndBlue"; if ($str =~ /$pat/){ print "マッチしました。\n"; }
この場合はパターンの中に記述した配列が変数展開されて /And/
と記述したのと同じになります。
my $str = "RedAndBlue"; if ($str =~ /And/){ print "マッチしました。\n"; }
今度はパターンの区切り文字として "'" を使用してみます。
my $pat = "And"; my $str = "RedAndBlue"; if ($str =~ m'$pat'){ print "マッチしました。\n"; }
この場合はパターンの中に記述した配列が変数展開が行われないので /$pat/
という文字列をパターンに記述したのと同じになります。
my $str = "RedAndBlue"; if ($str =~ /$pat/){ print "マッチしました。\n"; }
それでは簡単なサンプルを作成します。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my @color = ("blue", "red", "white"); $" = "|"; &check1("white snow"); &check2("white snow"); &check1('friend@color'); &check2('friend@color'); sub check1{ if ($_[0] =~ /@color/){ print $_[0]." は /@color/ にマッチします。\n"; }else{ print $_[0]." は /@color/ にマッチしません。\n"; } } sub check2{ if ($_[0] =~ m'@color'){ print $_[0].' は m\'@color\' にマッチします。'."\n"; }else{ print $_[0].' は m\'@color\' にマッチしません。'."\n"; } }
テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。
perl sample.pl
次のように実行結果が表示されます。
パターンの区切り文字としてシングルクオーテーションを使った場合とそれ以外を使った場合で、パターンの中に変数や配列を記述したときに変数展開されるかどうかが異なります。シングルクオーテーションを使った場合は変数展開されないので注意してください。
-- --
Perl の正規表現でパターンマッチ演算子の区切りにシングルクオーテーションを使った場合について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。