lasitha
2/24/2009 5:39:00 PM
On Tue, Feb 24, 2009 at 10:34 PM, Leo <minilith@gmail.com> wrote:
>> Turns out that \' is a regex interpolator, just like \1, \2, so
>> "a'b'c'd".gsub("'","\\'") did not work, nor did it with the 2nd param as
>> '\\\\''.
>
> The backslash in the string is first interpreted by ruby and then as
> regexp substitution pattern. This \\x becomes \x as substitution
> pattern but that really is just x then because there is no special
> substitution for \x. In order to replace x with \x, the substitution
> has to be \\x but since this is a string parsed by ruby before it gets
> there you have to escape those backslashes and make it "\\\\x".
>
> It really isn't that surprising but I agree that it would be nice to
> have a special string syntax that disables any special handling of
> backslashes so that you could write %X{\'}. I don't think such a
> syntax exists, does it?
>
We can use %q{} to eliminate one of the backslashes:
$: irb #(edited)
01> s = "a'b"
02> puts s.sub( "'", %q{\\\'} )
a\'b
That at least gets it down to one backslash per escape character :)
Cheers,
lasitha