在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"

aa 之后的所有内容替换。

【讨论】:

感谢您为我解释这一点。我猜 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中用\'替换'?的主要内容,如果未能解决你的问题,请参考以下文章

在 Hive 中用空替换单引号(')

在java中用','替换'\ n'

在 Notepad++ 中用 \t 替换正则表达式

如何在Java中用空字符串替换'

在 Pandas DataFrame 中用 None 替换无效值

在 MySQL 中用连接替换子查询