如何在字符串中写\ 1

时间:2016-03-23 21:39:15

标签: ruby string escaping

我试图在字符串中写\1,但我无法做到。如果有人帮我解决这个奇怪的行为,我将不胜感激。 Here是一个有一些解释的例子。

编辑:添加示例输出

puts "\1 <- null"

puts "\\1 <- slash one"

作品!

但打字 "\1" "\\1"

在irb命令行中产生

"\1"

=> "\u0001

"\\1"

=> "\\1"

4 个答案:

答案 0 :(得分:5)

有几种方法可以实现它:

"\\1"
'\1'
?\\ + ?1

请记住,它显示的方式始终是"\\1",这意味着文字反斜杠,一个,这就是你想要的。知道这是正确的方法是使用puts

puts "\\1"
# => \1

在双引号字符串中,反斜杠具有重要意义。 \n表示换行符。在单引号字符串中,有两个字符:反斜杠和n

你甚至可以测试一下:

"\\1".chars
# => ["\\", "1"]

'\1'.chars
# => ["\\", "1"]

所以你可以看到Ruby将其解释为两个字符,而不是三个字符。不要被双引号字符串中的第二个反斜杠所欺骗。这就是如何表示字面反斜杠。

答案 1 :(得分:2)

你试过puts '\1'吗? (单引号而不是双引号) 我不是100%肯定你在问什么,但如果这有帮助,那就欢呼吧。

答案 2 :(得分:2)

您的命令行显示“\ 1”,因为irb对该对象执行.inspect,它会转义该字符串。所以基本上\ 1是正确存储的,但是当它显示它时,它会添加另一个\来指示它已被转义

答案 3 :(得分:0)

当我在IRB并输入\1时,返回的值是\u0001,这是Ruby的方式 代表角色。

当我写puts('\1)时,IRB和运行时的行为是相同的 一个脚本。我看到一个unicode字符映射如下

0 0
0 1

这在所有平台上都不是相同的输出(取决于unicode的方式) 显示)。这就是为什么你在repl.it例子中看不到输出的原因。