From: Rob Biedenharn Date: 2008-02-23T02:48:44+09:00 Subject: Re: gsub("\\", "\\\\") seems unintuitive On Feb 22, 2008, at 12:27 PM, John Woods wrote: > The following confusing behavior is noted in the pickaxe book (2nd > ed) on page 75: > > # I would expect two backslashes in the result > irb> puts "\\".gsub("\\","\\\\") > \ > > # I would expect four backslashes in the result > irb> puts "\\".gsub("\\","\\\\\\\\") > \\ > > I can certainly work around it, but it seems unintuitive. Is there a > reason why gsub behaves this way? Just curious... Notwithstanding the earlier responses... Since the replacement string is evaluated 'twice', once as a ruby string literal and then again by gsub to look for group refrences like '\1', you need to provide two levels of escaping for a backslash. \ is "\\" so two of them is "\\\\" and you want gsub to see that so it need to have them escaped: "\\\\\\ \\" Whew! Yeah, it's unfortunate, but backslash is doing double-duty here: introducing a group reference to the regular expression and escaping characters in a string literal (just like "\n", but also itself). -Rob Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com