在Ruby中用\'替换'?
Posted
技术标签:
【中文标题】在Ruby中用\\\'替换\'?【英文标题】:Replace ' with \' in Ruby?在Ruby中用\'替换'? 【发布时间】:2011-01-17 00:32:23 【问题描述】:我正在尝试弄清楚如何将 '
之类的引用替换为 \'
之类的内容。
我该怎么做?
我试过了
"'".gsub("'","\\'")
但它只是给出一个空字符串。我在这里做错了什么?
【问题讨论】:
我希望你不要试图逃避 SQL 输入。始终“准备”您的陈述。 不是,是转义码,不是SQL。 【参考方案1】:这个怎么样
puts "'".gsub("'","\\\\'")
\'
原因是 \'
在 gsub(正则表达式)中表示 post-match,因此需要使用 \\'
进行转义,而 \
显然被转义为 \\
,以\\\\'
结尾。
例子
>> "abcd".gsub("a","\\'")
=> "bcdbcd"
a
被a
之后的所有内容替换。
【讨论】:
感谢您为我解释这一点。我猜 gsub 只是有一些隐藏的“功能”【参考方案2】:$'
变量是匹配项右侧的字符串。在gsub
替换字符串中,相同的变量将是\'
——因此出现了问题。
x = "'foo'"
x.gsub!(/'/, "\\'")
puts x.inspect # foo'foo
这应该可行:
x = "'foo'"
x.gsub!(/'/, "\\\\'")
puts x.inspect
puts x
【讨论】:
【参考方案3】:我实际使用过的两步法...
BACKSLASH = 92.chr
temp = "'".gsub("'", "¤'")
puts temp.gsub("¤", BACKSLASH)
=> "\'"
只有在文本中明显没有使用“¤”时才有效...
【讨论】:
【参考方案4】:这可能是一个错误。或者至少,它打破了我对最小惊喜原则的想法。
irb(main):039:0> "life's grand".gsub "'", "\\\'"
=> "lifes grands grand"
irb(main):040:0> "life's grand".gsub "'", "\\\\'"
=> "life\\'s grand"
【讨论】:
是的,这对我来说没有意义.. 当然我可以使用正则表达式,但这似乎有点矫枉过正。【参考方案5】:这样做怎么样:
"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'")
不漂亮,但我认为它有效......
【讨论】:
破坏性版本也不起作用。只是从 irb 提示符返回一个空白字符串 Ruby 版本是ruby 1.8.6 (2009-06-08 patchlevel 369) [x86_64-openbsd4.6]
以上是关于在Ruby中用\'替换'?的主要内容,如果未能解决你的问题,请参考以下文章