Почему String # gsub удваивает содержимое?

s = "#main= 'quotes'
s.gsub "'", "\\'" # => "#main= quotes'quotes"

Это кажется неправильным, я ожидаю получить " # main = \\' quotes \\ '"

, когда я не использую escape-символ, тогда он работает, как ожидалось.

s.gsub "'", "*" # => "#main= *quotes*"

Значит, должно быть что-то делать с экранированием.

Использование ruby ​​1.9.2p290

Мне нужно заменить одинарные кавычки на обратную косую черту и кавычки.

Еще больше несоответствий:

"\\'".length # => 2
"\\*".length # => 2

# As expected
"'".gsub("'", "\\*").length # => 2
"'a'".gsub("'", "\\*") # => "\\*a\\*" (length==5)

# WTF next:
"'".gsub("'", "\\'").length # => 0

# Doubling the content?
"'a'".gsub("'", "\\'") # => "a'a" (length==3)

Что здесь происходит?

9
задан Andrew Grimm 16 August 2011 в 07:48
поделиться