如何在字符串中使用转义字符

我一直在研究Ruby Koans,并对“escape子句和单引号字符串”示例感到困惑。

一个例子表明我不能以这种方式真正使用转义字符,但紧接着,给出了以下示例:

def test_single_quotes_sometimes_interpret_escape_characters string = '\\\'' assert_equal 2, string.size # <-- my answer is correct according to the program assert_equal "\\'", string # <-- my answer is correct according to the program end 

这使我在两个方面感到困惑:

  1. 单引号有时可以与转义字符一起使用。
  2. assert_equal"\\\'"时,为什么字符串大小为2 ? (我个人认为答案是"\'" ,这对于尺寸更有意义)。

你可以把你的string分成两部分来澄清事情:

 string = '\\' + '\'' 

每个部分都是长度为1的字符串; '\\'是单个字符\'\''是单个字符' 。 当你把它们放在一起时,你得到两个字符串\'

在单引号字符串文字中有两个特殊字符:反斜杠和单引号本身。 当然,单引号字符用于分隔字符串,因此您需要一些特殊的东西来将单引号转换为单引号字符串, 特殊东西是反斜杠所以'\''是一个单引号的字符串文字,代表一个包含一个单引号字符的字符串。 类似地,如果您需要在单个带引号的字符串文字中获得反斜杠,则使用另一个反斜杠转义它,因此'\\'长度为1且包含一个反斜杠。

单引号字符在双引号字符串文字中没有特殊含义,因此您可以毫无困难地说"'" 。 但是,反斜杠在双引号字符串中具有特殊含义,因此您必须说"\\"才能在双引号字符串中获得单个反斜杠。

考虑你的猜测"\'" 。 单引号在双引号字符串中没有特殊含义,并且转义不需要转义的内容只会给你回复的东西 ; 所以,如果c是一个不需要在双引号字符串中转义的字符,那么\c将只是c 。 特别是, "\'"计算结果为"'" (即双引号字符串中的一个单引号)。

结果是:

  • '\\\'' == "\\'"
  • "\\\"" == '\\"'
  • "\'" == '\''
  • "\'" == "'"
  • '\\\''.length == 2
  • "\\\"".length == 2
  • "\'".length == 1
  • "'".length == 1

Kassym给出的Wikibooks参考文献涵盖了这些内容。

我通常切换到%q{} (类似于单引号)或%Q{} (类似于双引号)当我需要将引号引入字符串时,所有反斜杠都会让我的眼睛流血。

这可能值得一读: http : //en.wikibooks.org/wiki/Ruby_Programming/Strings

 ruby-1.9.3-p0 :002 > a = '\\\'' => "\\'" ruby-1.9.3-p0 :003 > a.size => 2 ruby-1.9.3-p0 :004 > puts a \' 

在单引号中只有两个转义字符: \\\'