ruby - 单引号字符串中的反斜杠与双引号字符串

标签 ruby string quotes literals backslash

如果我在双引号和单引号字符串的开头添加反斜杠+空格,我会得到不同的结果:

"\ text"
'\ text' 

在双引号字符串的输出中我只看到一个空格。
在单引号字符串的输出中,我看到反斜杠+空格。

那里发生了什么?这是因为 '\' 在双引号字符串中被解释为特殊字符,但在单引号字符串中字符原样保留?

如果我将字符串更改为此,我会看到相同的输出,即单斜杠后跟一个空格,然后是文本:

"\\ text"
'\\ text' 

在这两种情况下,反斜杠都被转义了。我很困惑为什么他们在这种情况下以相同的方式工作。

是否有一些规则可以帮助解释单引号字符串和双引号字符串在 Ruby 中如何处理反斜杠之间的根本区别?

最佳答案

双引号字符串支持全范围的转义序列,如下所示:

  • \a 响铃/警报 (0x07)
  • \b 退格键 (0x08)
  • \e 转义(0x1b)
  • \f 福尔福德 (0x0c)
  • \n 换行符 (0x0a)
  • \r 返回 (0x0d)
  • \s 空格 (0x20)
  • \t 制表符 (0x09)
  • \v 垂直制表符 (0x0b)

对于单引号字符串,两个连续的反斜杠被一个反斜杠代替,一个反斜杠后跟一个单引号就变成一个单引号:

'escape using "\\"' -> escape using "\"
'That\'s right'     -> That's right

关于ruby - 单引号字符串中的反斜杠与双引号字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/648156/

相关文章:

ruby-on-rails - Rails 不会读取环境变量

ruby - Ruby 中的 $DEBUG 全局变量

java - 在java中将字符串写入输出流

bash - 理解 bash 中的 $' ' 引号

notepad++ - 在 Notepad++ 中将智能、 curl 引号转换为哑、直引号的最简单方法?

ruby-on-rails - Rails 应用程序有 schema.rb 但没有迁移文件

ruby-on-rails - 未定义方法 attr_accessible

c# - 从 Html Img 标签中检索 Url

Java : split a string that containing special characters

mysql - MySQL 中何时使用单引号、双引号和反引号