我试图弄清楚如何用类似'
的东西替换引用\'
。
我该怎么做?
我试过了
"'".gsub("'","\\'")
但它只是给出一个空字符串。我在这里做错了什么?
这个怎么样
puts "'".gsub("'","\\\\'")
\'
原因是这\'
意味着gsub (正则表达式)中的匹配后,因此它需要被转义,\\'
并且\
显然被转义为\\
,以 . 结尾\\\\'
。
例子
>> "abcd".gsub("a","\\'")
=> "bcdbcd"
a
替换为 之后的所有内容a
。
$'
变量是匹配右侧的字符串。在gsub
替换字符串中,相同的变量将是\'
- 因此问题。
x = "'foo'"
x.gsub!(/'/, "\\'")
puts x.inspect # foo'foo
这应该有效:
x = "'foo'"
x.gsub!(/'/, "\\\\'")
puts x.inspect
puts x
那可能是一个错误。或者至少,这打破了我对最小惊喜原则的看法。
irb(main):039:0> "life's grand".gsub "'", "\\\'"
=> "lifes grands grand"
irb(main):040:0> "life's grand".gsub "'", "\\\\'"
=> "life\\'s grand"
我实际使用的两步方法...
BACKSLASH = 92.chr
temp = "'".gsub("'", "¤'")
puts temp.gsub("¤", BACKSLASH)
=> "\'"
仅当文本中明显未使用“¤”时才有效...
这样做怎么样:
"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'")
不漂亮,但我认为它有效......