【问题标题】:Ruby backslash escaping: ' \\ \hline' as stringRuby 反斜杠转义:' \\ \hline' 作为字符串
【发布时间】:2018-11-17 09:58:09
【问题描述】:

我试图简单地拥有字符串

 '\\ \hline'

在我的程序中。 现在我使用了单引号,所以我希望

 a = ' \\ \hline'

给我我想要的,而不是我得到

 irb(main):001:0> a = ' \\ \hline'
 => " \\ \\hline"

鉴于我不知道意外的第二个双反斜杠,我将如何获得我想要的东西?

编辑:与a = "\"类似

【问题讨论】:

  • 不,这给了我字面上的 6 个反斜杠(是的,我在这里也很难传达我的反斜杠)
  • 天哪,我用的是pp,谢谢,这很愚蠢而且很混乱!
  • 您需要使用双反引号在 SO cmets 中正确转义:meta.stackexchange.com/a/190395
  • 在 IRB 中输入 gets.chomp,输入 \\ \hline 并按回车键。输出将是正确转义的字符串文字,即"\\\\ \\hline"

标签: ruby string escaping


【解决方案1】:

您可能必须转义所有反斜杠:

str = "\\\\ \\hline"
puts str
# => \\ \hline

请注意,如果您使用单引号字符串并仅转义单个反斜杠,它也可以工作:

str = '\\\\ \hline'
puts str
# => \\ \hline

如果你的反斜杠前面可能看起来像可以转义的字符:

str = '\\\\ \nline'
puts str
# => \\ \nline

但如果您使用双引号,则情况并非如此:

str = "\\\\ \nline"
puts str
# => \\ 
# => line

all 反斜杠的转义不是强制性的(正如@mudasobwa 正确指出的那样),并且在某些情况下您可能决定不使用它,但恕我直言,它是可取的,特别是如果您使用带双引号的字符串。

【讨论】:

  • “你必须转义所有的反斜杠”在技术上是错误的。只需转义那些有意义的反斜杠。 \h 可能不会被转义,它仍然可以正常工作。试试puts '\\\\ \hline'
  • \h 可能不是,但如果是\n\\h 不是必需的,但我更喜欢建议在特殊情况下也有效的东西......
  • 是的,这就是我使用“技术上错误”措辞的原因。
  • @mudasobwa 我认为最好将您的观点包含在答案中,以使其更完整...
猜你喜欢
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多