如何在字符串中使用转义字符
我一直在研究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
这使我在两个方面感到困惑:
- 单引号有时可以与转义字符一起使用。
- 当
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 \'
在单引号中只有两个转义字符: \\
和\'
。