Ruby /&in String

L. *_*een 1 ruby escaping

我需要在ZPL字符串中包含/&以打破标签上的长行.

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

这是我的问题:

>>"asdf & asdf".gsub("&", "\\\\&")
=>"asdf \\& asdf"
Run Code Online (Sandbox Code Playgroud)

是的,如果我把字符串放回去它会返回我想要的东西:

>>puts "asdf & asdf".gsub("&", "\\\\&")
=>asdf \& asdf
Run Code Online (Sandbox Code Playgroud)

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

我试过检查:

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

>>"asdf & asdf".gsub("&", "\&").inspect
=>"\"asdf & asdf\""
Run Code Online (Sandbox Code Playgroud)

但这也不能回报我的需要.也许有一些我错过的组合会返回一个\&在字符串中?

谢谢

tad*_*man 5

当你看到Ruby显示的内容如下:

"asdf \\& asdf"
Run Code Online (Sandbox Code Playgroud)

这被分解为令牌\\(反斜杠)和&(&符号),其中第一个反斜杠是特殊的,第二个是实际角色.您可以将其读作" 文字反斜杠".

打印时你会看到实际的字符串.这是正确的.

在内部,双反斜杠实际上并不存在,这只是必须处理双引号字符串的结果.

这是为了确保\n\r和其他的控制工作,但你也能够把实际的反斜杠.\n(换行符)和\\n(字面反斜杠字母n)之间有很大的区别.

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

'%.1f%%' % 10.3
#=> "10.3%"
Run Code Online (Sandbox Code Playgroud)

每种格式都有自己的怪癖和关注点.HTML不会将反斜杠视为特殊,但它确实<和,>并且&,因此您将看到&amp;而不是&符号.

  • 好答案.另一种说法是,"\\"`代表一个反斜杠,尽管你看到两个.就像`"\n"`代表一个新行,虽然你没有看到换行符. (2认同)