From: Tanaka Akira Date: 2003-06-20T03:38:46+09:00 Subject: [ruby-dev:20389] Re: [Oniguruma] quoting substring In article <5FD2F0CF7F5D7F44B00F36870B9E78B508DE5040@SBG-EX4>, kkosako@softbank.co.jp writes: > PerlとJavaの正規表現で実現されている > 「リテラルテキスト範囲指定」を実装してみたんですが、 > デフォルトで有効にしても構いませんか? > (\Qから\Eの間の全ての正規表現のメタ文字が無効になります。) > > /...\Q.?*+\{}[]\E.../.match("aaa.?*+\\{}[]aaa") 弱い反対を表明します。 この機能はいれるなら Perl のように正規表現リテラルの機能とすべきだと思 います。 なぜかというと、エンジンで扱うと \Q...\E の中で式展開が起きた中に \E が含まれている場合に、その \E でリテラルテキストが終ってしまうだろうか らです。 この結果、 /...\Q#{...}\E.../ /...#{Regexp.quote ...}.../ という 2つの記述で、 前者は短いけれど展開結果に \E が含まれているときに問題があり、 後者は長いけれど展開結果に \E が含まれていても問題がない、 という状況が生まれます。 ここで、プログラマは怠惰ですから短い前者を使いたがるわけですが、前者に は \E の問題があります。つまり、エンジンで \Q...\E をサポートすること は問題がある記述にプログラマを誘導することになります。 というわけで、あんまりよくないんじゃないか、というわけです。 -- [田中 哲][たなか あきら][Tanaka Akira]