(Ruby 1.9.2では)ゼロまたは偶数のバックスラッシュが前に付いた特別なコード(%x)のすべてのインスタンスを見つけて置き換えるための最良の方法を見つけようとしています。
言い換えると、 :
%x --> FOO
\%x --> \%x
\\%x --> \\FOO
\\\%x --> \\\%x
\\\\%x --> \\\\FOO
etc.
文字列には複数のインスタンスが含まれる場合があります:「これは、2つの%xコードを持つ私の%x文字列です。」
こことここで尋ねられた質問の助けを借りて、私は私がやりたいことをするために次のコードを手に入れました:
str.gsub(/
(?<!\\) # Not preceded by a single backslash
((?:\\\\)*) # Eat up any sets of double backslashes - match group 1
(%x) # Match the code itself - match group 2
/x,
# Keep the double backslashes (match group 1) then put in the sub
"\\1foo")
ただし、その正規表現は一種のヘビー級のようです。このコードは私のアプリケーションでは妥当な頻度で呼び出されるので、これを行うためのより良い(よりクリーンでより効率的な)方法を見逃していないことを確認したいと思います。