Rubyの[]]

タイトルに、ASCIIの大括弧を書けないようなので、JISX0208の大括弧を代わりに書いておく。

正規表現の文字クラス指定「[ ]」の中で、「]」という文字自体を含めたいときは「[」の直後(否定の時は「[^」の直後)に書けばいいが、Rubyでそう書くと「character class has `]' without escape」という警告が出る。これは気持ち悪い。


Perl由来かと思ったが、Perlでは警告が出ない。うーむ、Ruby独自の仕様のようだ。「何でまた?」という気分。


余談だが、文字クラス指定の中の「^-\.*?」などを何でもかんでもやたらと「\」でクォートしまくるのも時々見かける。これを「正規表現表記のクレオール化」とでも呼ぶべきか。
ちなみに本来は、文字クラス指定の中で「\」は特殊文字ではなくバックスラッシュ(or¥)そのものを示すので、「\」でクォートしたつもりになると文字クラスに意図せず「\」も含まれてしまう。ただPerlRubyだと文字クラスの中であっても特殊文字扱いのようである。こっちはRuby独自ではなくPerl由来か。パーサーの書きやすさが理由であろうか?