Perl Perl_0 正規表現
Perl 「 正規表現 」: m// パターンのデリミタ (0x62)

目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x62 回。
Perl の「 正規表現 」( Regular expression ) m// 演算子を使ったパターンのデリミタについて。
m// 演算子
「 m// 」演算子は、Perl で正規表現を用いたパターンマッチングを行う際に、もっとも基本的な演算子です。
「 Perl 「 正規表現 」: 演算子とメタキャラクタ (0x58) 」でも触れた様に、Perl の正規表現は、「 m// 」、「 s/// 」、「 qr// 」、「 split 」の一部です。
「 m// 」演算子の「 m 」は、「 matching 」( あるいは match の )「 m 」と覚えます。
通常のパターンマッチングで使われる「 // 」は「 m 」が省略された形式です。
「 // 」演算子は、パターンマッチングの標準の「 デリミタ : 区切り文字 」 ( Delimiter ) として設定されているので、「 m 」の省略が可能となっています。
様々なデリミタ
「 Perl リストリテラル : クォート演算子「 qw 」(0x1e) 」で確認したのと同じ様に、「 m// 」演算子でもデリミタを任意に変更することが可能です。
例えば、次の様なデリミタが使えます。
m!pattern!; # デリミタに !
m?pattern?; # デリミタに ?
m#pattern#; # デリミタに #
m\pattern\; # デリミタに \
m>pattern>; # デリミタに >
m}pattern}; # デリミタに }
m; # デリミタに <>
m{pattern}; # デリミタに {}
これがすべてではありませんが、「 m 」を前置した場合に「 pattern 」内に同じ記号が存在しなければ、任意の記号が利用出来ると覚える良いと思います。
* 「 < > 」を除くカッコ ( [ ], { }, ( ) ) は、対で使う限り pettern 内でも利用可能です。e.g.「 m[pe[tt]ern] 等」
ただし、「 qw 」演算子と同様に、開始のデリミタが「 開きカッコ 」だった場合は、終了のデリミタは同じ種類の「 閉じカッコ 」でなければいけません。
デリミタの変更は Unix 系のシステムでとても重宝します。
Unix 系のシステムでは、ファイルの位置を表すシステムパスの区切りが「 / 」で表されているため、パターンマッチングの標準デリミタ「 / 」と区別が付かなくなるからです。
Web サイトの URL も同様に、ファイルの階層が「 / 」で区切られているので、デリミタの変更が有用です。
お馴染みの「 \ 」エスケープは利用可能ですが、素直にデリミタを変更した方がスマートです。
# 標準のデリミタ
/\/usr\local\/bin\/perl/;
/http:\/\/example.jp\/index.html/;
# 任意のデリミタ
m{/usr/local/bin/perl};
m#http://example.jp/index.html#;
0x62 -> 0x63 へ
Perl の正規表現のパターンマッチングでは、いくつかの修飾子が存在します。パターンマッチングの修飾子は、マッチングの挙動を任意に操作出来るオプションです。
これについては、次回確認する予定です。
参考情報は書籍「 初めての 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)