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