Wolfgang Nádasi-Donner schrieb:
> Ooops
> 
> irb(main):005:0> puts "a string with \\ a backslash".gsub(/\\/, "\\\\\\\\")
> a string with \\ a backslash
> 
> This works as expected, but why it works with '\'*6 I don't understand.

Even after looking to "Programming Ruby - Second Edition", and several other 
places, I have no idea why it works with '\\\\\\', and other strange things like 
this:

irb(main):001:0> x = "a\\b"
=> "a\\b"
irb(main):002:0> puts x
a\b
=> nil
irb(main):003:0> puts x.gsub(/\\/, '+\\\\\\+')
a+\b
=> nil
irb(main):004:0> puts x.gsub(/\\/, '+\\\\\\\\+')
a+\\+b
=> nil
irb(main):005:0> puts x.gsub(/\\/, '+\\\\\\t')
a+\\tb
=> nil
irb(main):006:0> puts x.gsub(/\\/, '+\\\\\\\\t')
a+\\tb
=> nil

Especially if I take the following into account:

irb(main):001:0> x = '\\\\'
=> "\\\\"
irb(main):002:0> puts x
\\
=> nil
irb(main):003:0> puts Regexp.escape(x)
\\\\
=> nil
irb(main):004:0> Regexp.escape(x) == '\\\\\\\\'
=> true
irb(main):005:0> Regexp.escape(x) == '\\\\\\'
=> false

Wolfgang Nádasi-Donner