使用单引号而不是双引号时,转义受到限制:
puts 'sinlge\nquote'
puts "double\nquote"
"\0"
'\0'
是
"\\0"
因此两者
'hello'.gsub(/.+/, '\0')
'hello'.gsub(/.+/, "\\0")
返回
"hello"
,但是
'hello'.gsub(/.+/, "\0")
"\000"
'hello'.gsub(/.+/, '\\0')
返回
'hello'
ruby正在试图处理程序员没有记住单引号和双引号的区别。事实上,这与
gsub
:
'\0' == "\\0"
和
'\\0' == "\\0"
. 按照这个逻辑,不管你怎么想,ruby都是这样看待其他字符串的:两者
'\\\0'
和
'\\\\0'
平等的
"\\\\0"
\\0
. gsub使用
\x
要插入匹配号x,需要一种方法来逃脱
\十
,即
\\x
,或在其字符串表示形式中:
"\\\\x"
.
所以这条线
puts 'hello'.gsub(/.+/, "\\0 \\\\0 \\\\\\0 \\\\\\\\0")
hello \0 \hello \\0