Çalışmadığını düşündüğünüz kod:
var = "Value"
str = "a test Value"
p str.gsub( /#{var}/, 'foo' ) # => "a test foo"
Var, düzenli ifade meta karakterleri içerebiliyorsa işler daha ilginç hale gelir. Eğer öyleyse ve bu matakarakterlerin normal ifadede genellikle yaptıkları şeyi yapmasını istiyorsanız, aynı gsub çalışacaktır:
var = "Value|a|test"
str = "a test Value"
str.gsub( /#{var}/, 'foo' ) # => "foo foo foo"
Arama dizesi meta içeriyorsa ve eğer Ancak, değil onları meta karakterler olarak yorumlanır istiyorum, sonra böyle Regexp.escape kullanın:
var = "*This*"
str = "*This* is a string"
p str.gsub( /#{Regexp.escape(var)}/, 'foo' )
# => "foo is a string"
Veya gsub'a normal ifade yerine bir dize verin. MRI> = 1.8.7'de, gsub bir dize değiştirme bağımsız değişkenini normal bir ifade olarak değil, düz bir dize olarak ele alır:
var = "*This*"
str = "*This* is a string"
p str.gsub(var, 'foo' ) # => "foo is a string"
(Eskiden gsub için bir dize değiştirme bağımsız değişkeni otomatik olarak normal ifadeye dönüştürülüyordu. 1.6'da bunun böyle olduğunu biliyorum. Değişikliği hangi sürümün başlattığını hatırlamıyorum).
Diğer yanıtlarda belirtildiği gibi, enterpolasyona alternatif olarak Regexp.new'i kullanabilirsiniz:
var = "*This*"
str = "*This* is a string"
p str.gsub(Regexp.new(Regexp.escape(var)), 'foo' )
# => "foo is a string"