Perl Perl_0 正規表現
Perl 「 正規表現 」: バックスラッシュ (0x59)
目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x59 回。
Perl の「 正規表現 」( Regular expression ) のメタキャラクタ「 バックスラッシュ 」について。
バックスラッシュ「 \ 」
各メタキャラクタの機能については順次確認しますが、まず最初に「 \ 」( Backslash ) について簡易的に確認しておきます。
文字コードの環境によっては、「 円 」マークとして表示されるバックスラッシュ「 \ 」は、「 / 」( Slash ) の左右を反転させた記号です。
* このブログでも、Syntaxhighlighter で表示されるコードの部分以外はすべて「 円 」マークになっています。
正規表現では、通常これをメタキャラクタの「 エスケープ 」( Escape ) として利用します。
英語の「 Escape 」は、「 逃げる 」「 逃れる 」等の意味があります。
「 \ 」はつまり、メタキャラクタの持つ特別な意味から逃れる機能を提供する、対メタキャラクタのためのメタキャラクタです。
例えば、これは次の様に使います。
$_ = 'This price is $100.'; # シングルクォーテーション
my ($match) = m/(...$)/; # m// と . と $ と () を利用
print "Line 3: $match\n";
($match) = m/(...\$)/; # \ を追加
print "Line 6: $match\n";
上記では、「 \ 」の他に「 . 」と「 $ 」と「 ( ) 」のメタキャラクタを使っていますが、ここでは「 \ 」の機能にフォーカスします。
1 行目では、暗黙のスカラ変数 $_ に対して文字列を代入しています。シングルクォートで囲んでいるのは、「 $100 」を変数展開させないためです。
* ダブルクォートを利用する場合は「 \$100 」とします。ここで使う「 \ 」もシジル $ の機能を無効化するエスケープとして働きますが、これは (たぶん) 正規表現の機能ではなく、Perl が提供する機能です。
3 行目と 6 行目は、正規表現のパターンマッチに使う「 m// 」演算子を使って、ほとんど同じ処理をしています。パターンマッチの対象は、暗黙のスカラ変数 $_ です。
この処理を要約すると、パターン「 ...$ 」( 3 行目 ) と、パターン「 ...\$ 」( 6 行目 ) にマッチングする文字列を、スカラ変数 $match に代入して print するということです。
両者には、行末にマッチするメタキャラクタ「 $ 」をエスケープするかどうかの違いがあります。メタキャラクタ「 . 」は、任意の 1 文字にマッチするので、ここでは、合計 3 文字にマッチすることになります。
このプログラムを実行すると、次の結果を得られます。
Line 3: 00.
Line 6: is $
$_ に代入した文字列は「 This price is $100. 」でした。
3 行目のパターンでは、メタキャラクタ「 $ 」が効果を発揮して「 行末 」の 3 文字とマッチしていますが、6 行目のパターンでは、メタキャラクタとしての機能がバックスラッシュ「 \ 」によりエスケープされたことで、「 is $ 」( i, s, 空白, $ ) の 4 文字 がマッチする結果となっています。
0x59 -> 0x5a へ
正規表現のバックスラッシュには、エスケープとはまた別の役割も与えられていますが、今回は割愛します。
また、今回確認したプログラムコードでは、「 ( ) 」を使ったキャプチャグループと、これまた「 ( ) 」を使ったリストコンテキストを利用して ( スカラコンテキストではマッチの成否のみを返す)、マッチングした文字列をスカラ変数に代入しています。
この辺りの機能についても今回は割愛していますが、順を追って確認して行く予定です。
参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。
目次 - Perl Index
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)