我正试图弄清楚如何用'
之类的内容替换像\'
这样的引用。
我该怎么做?
我试过了
"'".gsub("'","\\'")
但它只是一个空字符串。我在这做错了什么?
答案 0 :(得分:28)
这个怎么样
puts "'".gsub("'","\\\\'")
\'
原因是\'
表示gsub(正则表达式)中的匹配后,因此需要使用\\'
和\
进行转义。显然是\\
转义,最后是\\\\'
。
实施例
>> "abcd".gsub("a","\\'")
=> "bcdbcd"
a
将替换为a
之后的所有内容。
答案 1 :(得分:2)
$'
变量是匹配右侧的字符串。在gsub
替换字符串中,相同的变量将是\'
- 因此问题。
x = "'foo'"
x.gsub!(/'/, "\\'")
puts x.inspect # foo'foo
这应该有效:
x = "'foo'"
x.gsub!(/'/, "\\\\'")
puts x.inspect
puts x
答案 2 :(得分:0)
这可能是一个错误..或者至少,某些东西打破了我对最小惊喜原则的看法。
irb(main):039:0> "life's grand".gsub "'", "\\\'"
=> "lifes grands grand"
irb(main):040:0> "life's grand".gsub "'", "\\\\'"
=> "life\\'s grand"
答案 3 :(得分:0)
我实际使用的两步法......
BACKSLASH = 92.chr
temp = "'".gsub("'", "¤'")
puts temp.gsub("¤", BACKSLASH)
=> "\'"
只有在文本中没有使用“¤”时才会起作用......
答案 4 :(得分:-1)
这样做:
"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'")
不漂亮,但我认为它有效......