あなたが思うコードは機能しません、しません:
var = "Value"
str = "a test Value"
p str.gsub( /#{var}/, 'foo' ) # => "a test foo"
varに正規表現のメタ文字を含めることができれば、さらに興味深いものになります。それが可能で、それらのマタ文字が通常の正規表現で通常行うことを実行したい場合、同じgsubが機能します。
var = "Value|a|test"
str = "a test Value"
str.gsub( /#{var}/, 'foo' ) # => "foo foo foo"
ただし、検索文字列にメタ文字が含まれていて、メタ文字として解釈させたくない場合は、次のようにRegexp.escapeを使用します。
var = "*This*"
str = "*This* is a string"
p str.gsub( /#{Regexp.escape(var)}/, 'foo' )
# => "foo is a string"
または、正規表現の代わりにgsubに文字列を与えるだけです。MRI> = 1.8.7では、gsubは文字列置換引数を正規表現ではなくプレーン文字列として扱います。
var = "*This*"
str = "*This* is a string"
p str.gsub(var, 'foo' ) # => "foo is a string"
(以前はgsubへの文字列置換引数が自動的に正規表現に変換されていました。私はそれが1.6でそうだったことを知っています。どのバージョンが変更を導入したか覚えていません)。
他の回答で述べたように、Regexp.newを補間の代わりとして使用できます。
var = "*This*"
str = "*This* is a string"
p str.gsub(Regexp.new(Regexp.escape(var)), 'foo' )
# => "foo is a string"