次のコードを試してください。
s = '#value#'
puts s.gsub('#value#', Regexp.escape('*')) # => '\*'
puts s.gsub('#value#', Regexp.escape('+')) # => ''
え?char '\+' (Regexp.escape によって返される) は、gsub によって完全に無視されているようです。これを修正する方法は?
これは、特別な変数の補間によるものです。\+
「実際に試合に参加した最大番号のキャプチャグループによって照合されたテキスト」に置き換えられます(http://www.regular-expressions.info/ruby.htmlの「特殊変数」セクションを参照) 。
ブロック構文は、実際にはこれを修正したものであり、よくできています。
#ruby の xsdg はこれを解決しました
gsub の置換が解析されているように見えるため、プロセスのどこかで + が失われます。回避策は、gsub のブロック構文を使用することです。こちらです:
s = '#value#'
puts s.gsub('#value#') { |v| Regexp.escape('+') } # => '+'
期待どおりに動作します:)
ありがとう、xsdg!