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 「 正規表現 」: m// パターンのデリミタ (0x62)

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)の記事
 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 ▲