From: Robert Klemme Date: 2004-01-22T19:50:02+09:00 Subject: Re: gsub oddity? "Mark J. Reed" schrieb im Newsbeitrag news:20040121221951.GD16733@mulan.thereeds.org... > On Thu, Jan 22, 2004 at 06:57:22AM +0900, Ralph Mason wrote: > > What am I missing here. I am trying to replace a single quote with the > > string \' > > You're missing an extra level of processing applied to the replacement > string for gsub in order to let you include parts of what you're > replacing. No, in this case he's missing extra backslashes: irb(main):002:0> str='a\'o' => "a'o" irb(main):003:0> str.gsub(/'/, '\\\\\'' ) => "a\\'o" irb(main):004:0> puts str.gsub(/'/, '\\\\\'' ) a\'o => nil It does look a bit odd, but the explanation is logical: There are two levels of escaping involved. The first level is that needed for the ruby parser to get the expected characters into the replacement string. The second level is used in order to be able to use a backslash literally in the substitution string. irb(main):005:0> puts '\\\\\'' \\' => nil You need two backslashes in the substitution string to prevent gsub from interpreting the backslash as escape char. That makes four backslashes when entering the string. The fifth backslash escapes the single quote in order to be able to include it into the string. Regards robert