Ruby /&在字符串中

时间:2018-10-25 19:54:15

标签: ruby escaping

我需要在ZPL字符串中包含/&,以使标签上的长行中断。

有一个stackoverflow post提出了很多方法,但似乎没有回答我的问题:

这是我的问题:

>>"asdf & asdf".gsub("&", "\\\\&")
=>"asdf \\& asdf"

是的,如果我放入字符串,它将返回我想要的内容:

>>puts "asdf & asdf".gsub("&", "\\\\&")
=>asdf \& asdf

但是我需要实际的字符串等于asdf \& asdf

我尝试检查:

>>"asdf & asdf".gsub("&", "\\\\&").inspect
=>"\"asdf \\\\& asdf\""

>>"asdf & asdf".gsub("&", "\&").inspect
=>"\"asdf & asdf\""

但这也不能返回我需要的东西。也许我缺少某种组合,它将在字符串中返回\&?

谢谢

1 个答案:

答案 0 :(得分:5)

当您看到Ruby显示如下内容时:

"asdf \\& asdf"

这被分解为令牌\\(反斜杠)和&(与号),其中第一个反斜杠是特殊字符,第二个是实际字符。您可以将其读为“ 文字反斜杠”。

打印时,您会看到实际的字符串。是的。

内部实际上并没有双反斜杠,这只是必须处理双引号字符串的结果。

这是为了确保\n\r和其他控制字符可以正常工作,但是您也可以输入实际的反斜杠。 \n(换行符)和\\n文字反斜杠字母n)之间有很大的区别。

在处理带有特殊字符的数据格式时,您会经常看到这种情况。例如,在printf样式格式化程序中,%很重要,因此要打印实际的%,您需要将其加倍:

'%.1f%%' % 10.3
#=> "10.3%"

每种格式都有其自身的怪癖和问题。 HTML不会将反斜杠视为特殊字符,但它会将<>&当作特殊字符,因此您会看到&amp;而不是&符号。