blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0 正規表現

Perl 「 正規表現 」: バックスラッシュ (0x59)

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)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲