どこでも使える正規表現
正規表現は一見どこでも同じように使えるように見えるが、実際には処理系ごとにフラグの扱いや特殊文字のエスケープ方法、Unicode対応などに微妙な差異がある。本記事では、複数の言語やツール間で移植可能な正規表現を書くための注意点とベストプラクティスを解説する。
背景メモ
- 正規表現(regex)は、文字列のパターンマッチングに使われるミニ言語。ほぼ全てのプログラミング言語やツールでサポートされているが、方言(フレーバー)が異なり、同じ書き方が動く環境と動かない環境がある。
- John D. Cookは応用数学者・プログラマーで、数学とソフトウェアの交差点に関するブログで知られる。本記事は彼の「Regex Everywhere」シリーズの一部。
- 「PCRE(Perl互換正規表現)」と「POSIX標準」という2大流派が存在。PerlやPython、JavaScriptなどはPCRE系だが、grepやsed、awkなどの古典的UnixツールはPOSIX系(しかも「基本」と「拡張」に分かれる)。
- Cookは、どの環境でも動く「ポータブルな正規表現」を書くための実践的テクニックを提示している。具体的には、メタ文字のエスケープ方法や、文字クラスの使い分け、最長一致/最短一致の指定における注意点など。