14

我试图弄清楚如何用类似'的东西替换引用\'

我该怎么做?

我试过了

"'".gsub("'","\\'")

但它只是给出一个空字符串。我在这里做错了什么?

4

5 回答 5

29

这个怎么样

puts "'".gsub("'","\\\\'")
\'

原因是这\'意味着gsub (正则表达式)中的匹配后,因此它需要被转义,\\'并且\显然被转义为\\,以 . 结尾\\\\'

例子

>> "abcd".gsub("a","\\'")
=> "bcdbcd"

a替换为 之后的所有内容a

于 2010-02-15T15:01:22.857 回答
3

$'变量是匹配右侧的字符串。在gsub替换字符串中,相同的变量将是\'- 因此问题。

x = "'foo'"
x.gsub!(/'/, "\\'")
puts x.inspect        # foo'foo

这应该有效:

x = "'foo'"
x.gsub!(/'/, "\\\\'")
puts x.inspect
puts x
于 2010-02-15T15:00:45.933 回答
0

那可能是一个错误。或者至少,这打破了我对最小惊喜原则的看法。

irb(main):039:0> "life's grand".gsub "'", "\\\'"
=> "lifes grands grand"
irb(main):040:0> "life's grand".gsub "'", "\\\\'"
=> "life\\'s grand"
于 2010-02-15T14:53:52.420 回答
0

我实际使用的两步方法...

BACKSLASH = 92.chr
temp = "'".gsub("'", "¤'")
puts temp.gsub("¤", BACKSLASH)
=> "\'"

仅当文本中明显未使用“¤”时才有效...

于 2010-02-15T15:01:27.740 回答
-1

这样做怎么样:

"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'")

不漂亮,但我认为它有效......

于 2010-02-15T14:51:05.050 回答