Le code que vous pensez ne fonctionne pas, n':
var = "Value"
str = "a test Value"
p str.gsub( /#{var}/, 'foo' ) # => "a test foo"
Les choses sont encore plus intéressantes si var peut contenir expression régulière méta-caractères. Si elle le fait, et vous voulez que ces matacharacters à ce qu'ils font habituellement dans une expression régulière, la même gsub:
var = "Value|a|test"
str = "a test Value"
str.gsub( /#{var}/, 'foo' ) # => "foo foo foo"
Toutefois, si votre chaîne de recherche contient des caractères de remplacement et vous ne pas voulez interprétés comme des caractères de remplacement, puis utiliser les Regexp.fuir comme ceci:
var = "*This*"
str = "*This* is a string"
p str.gsub( /#{Regexp.escape(var)}/, 'foo' )
# => "foo is a string"
Ou tout simplement donner gsub une chaîne au lieu d'une expression régulière. En IRM >= 1.8.7, gsub permettra de traiter une chaîne de caractères de remplacement en argument une chaîne simple, pas une expression régulière:
var = "*This*"
str = "*This* is a string"
p str.gsub(var, 'foo' ) # => "foo is a string"
(Il l'habitude d'être qu'une chaîne de caractères de remplacement argument gsub a été automatiquement converti en une expression régulière. Je sais que c'était de cette façon en 1.6. Je ne me souviens pas de la version introduit le changement).
Comme indiqué dans d'autres réponses, vous pouvez utiliser les Regexp.nouveau comme une alternative à l'interpolation:
var = "*This*"
str = "*This* is a string"
p str.gsub(Regexp.new(Regexp.escape(var)), 'foo' )
# => "foo is a string"