【问题标题】:Single backslash for Ruby gsub replacement value?Ruby gsub 替换值的单反斜杠?
【发布时间】:2021-08-19 00:23:41
【问题描述】:

有谁知道如何在 Ruby 的 gsub 方法中提供单个反斜杠作为替换值?我认为使用双反斜杠作为替换值会产生一个反斜杠,但它会产生两个反斜杠。

示例:"a\b".gsub("\", "\\")

结果:a\\b

我也使用块得到相同的结果:

示例:"a\b".gsub("\"){"\\"}

结果:a\\b

显然,我不能对替换值使用单个反斜杠,因为这只会用来转义后面的引号。我还尝试在替换值周围使用单引号(而不是双引号),但结果中仍然出现两个反斜杠。

编辑:感谢评论者,我现在意识到我的困惑在于 Rails 控制台如何报告操作结果(即a\\b)。尽管字符串'a\b''a\\b' 看起来不同,但它们的长度相同:

'a\b'.length(3)

'a\\b'.length(3)

【问题讨论】:

  • 使用单引号确实有效,但单反斜杠表示为“\\”。 puts 结果字符串,或者验证字符串的大小 - 它是 3。
  • ...注意"a\b".gsub("\", "\\").each_char.map(&:ord) #=> [97, 92, 98].

标签: ruby gsub backslash html-escape-characters


【解决方案1】:

您可以用"\\"'\\' 表示单个反斜杠。在 irb 中试试这个,在哪里

 "\\".size

正确输出1,表明你在这个字符串中确实只有一个字符,而不是你想象的2个。你也可以做一个

 puts "\\" 

同样,你的例子

puts("a\b".gsub("\", "\\"))

正确打印

a\b

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2013-04-15
    相关资源
    最近更新 更多