আপনার মনে হয় যে কোডটি কাজ করে না, তা করে:
var = "Value"
str = "a test Value"
p str.gsub( /#{var}/, 'foo' ) # => "a test foo"
বিষয়গুলিতে নিয়মিত প্রকাশের মেটা-অক্ষর থাকতে পারে তবে জিনিসগুলি আরও আকর্ষণীয় হয়ে উঠবে। যদি এটি হয় এবং আপনি চান যে এই ম্যাটাচ্যাকাররা সাধারণত নিয়মিত প্রকাশে যা করেন তা করা উচিত, তবে একই জিএসব কাজ করবে:
var = "Value|a|test"
str = "a test Value"
str.gsub( /#{var}/, 'foo' ) # => "foo foo foo"
তবে, যদি আপনার অনুসন্ধানের স্ট্রিংয়ে মেটাচার্যাক্টর থাকে এবং আপনি এগুলি মেটাচার্যাকার হিসাবে ব্যাখ্যা করতে চান না , তবে রিজেএক্সএক্স.সেসকেপটি এটি ব্যবহার করুন:
var = "*This*"
str = "*This* is a string"
p str.gsub( /#{Regexp.escape(var)}/, 'foo' )
# => "foo is a string"
বা কেবল নিয়মিত এক্সপ্রেশনের পরিবর্তে gsub কে স্ট্রিং দিন। এমআরআই> = 1.8.7 এ, gsub একটি স্ট্রিং প্রতিস্থাপন যুক্তিটিকে একটি নিয়মিত প্রকাশ হিসাবে নয়, সরল স্ট্রিং হিসাবে বিবেচনা করবে:
var = "*This*"
str = "*This* is a string"
p str.gsub(var, 'foo' ) # => "foo is a string"
(এটি ব্যবহৃত হত যে gsub- এ স্ট্রিং প্রতিস্থাপনের যুক্তিটি স্বয়ংক্রিয়ভাবে একটি নিয়মিত অভিব্যক্তিতে রূপান্তরিত হয়েছিল I আমি জানি যে এটি ছিল 1.6 সালে।
অন্যান্য উত্তরে উল্লিখিত হিসাবে, আপনি দ্রবীভূতকরণের বিকল্প হিসাবে Regexp.new ব্যবহার করতে পারেন:
var = "*This*"
str = "*This* is a string"
p str.gsub(Regexp.new(Regexp.escape(var)), 'foo' )
# => "foo is a string"