使用Ruby';s gsub,字符串包含\0“;

使用Ruby';s gsub,字符串包含\0“;,ruby,gsub,Ruby,Gsub,我无法正确使用gsub: 鉴于此代码: "replace me".gsub(/replace me/, "this \\0 is a test") 结果是: "this replace me is a test" 但我期待的是: "this \0 is a test" 如何使用gsub获得我想要的结果 用另一个反斜杠将其转义,以便gsub知道您想要“\\0” (编辑)如果您所说的“\0”是指字节0x00,请执行以下操作: "replace me".gsub(/replace me/,

我无法正确使用gsub:

鉴于此代码:

"replace me".gsub(/replace me/, "this \\0 is a test")
结果是:

 "this replace me is a test" 
但我期待的是:

"this \0 is a test"

如何使用gsub获得我想要的结果

用另一个反斜杠将其转义,以便
gsub
知道您想要
“\\0”

(编辑)如果您所说的
“\0”
是指字节
0x00
,请执行以下操作:

"replace me".gsub(/replace me/, "this \0 is a test")

用另一个反斜杠将其转义,以便
gsub
知道您想要
“\\0”

(编辑)如果您所说的
“\0”
是指字节
0x00
,请执行以下操作:

"replace me".gsub(/replace me/, "this \0 is a test")

\0是一个被整个匹配项替换的反向引用,它不是Ruby独有的。(您通常将其视为\1、\2等。\0更为罕见)当在单引号中找到
'\0'
时(通常是
gsub
的最后一个参数),它相当于
“\\0”
在双引号中,因为除了单引号中的
'\\'
'\''\'
之外,不能有任何转义序列。0是一个反向引用,被整个匹配项替换,并且它不是Ruby独有的。(您通常将它们视为\1、\2等。\0更为罕见)当在单引号中找到
'\0'
时(正如
gsub
的最后一个参数通常是一样),它相当于在双引号中找到
'\\0'
,因为在单引号中除了
'\\\'
'\'\'
之外不能有任何转义序列。不,我不是指“\0”正如字节0x00所说,我有字符串
string='这是一个测试'
,我想使用这个字符串作为gsub的第二个参数。
string.gsub(/\\/,“\\\\\”)
?如何转义
string
,以使
\0
不被匹配项替换?如果替换文本不是编码时无法转义的字符串文字,则这将转义它们:
string.gsub!(/(\\\d)/,“\\1”)
-替换字符串中有五个斜杠。每两个在实际字符串中变为一个,因此
gsub
看到
\\\1
表示一个反斜杠,后跟正则表达式
\\\d
的第一个匹配项。这本身就是一个反斜杠后跟一个数字。因此,假设输入字符串包含
\0
,它将被转换为
\\0
或字面上的两个反斜杠,后跟一个数字零。不,我不是指“\0”,因为字节0x00表示我有字符串
字符串='这\0是一个测试'
,我想使用这个字符串作为gsub的第二个参数。
string.gsub(/\\/,“\\\\\”)
?如何转义
string
,以使
\0
不被匹配项替换?如果替换文本不是编码时无法转义的字符串文字,则这将转义它们:
string.gsub!(/(\\\d)/,“\\1”)
-替换字符串中有五个斜杠。每两个在实际字符串中变为一个,因此
gsub
看到
\\\1
表示一个反斜杠,后跟正则表达式
\\\d
的第一个匹配项。这本身就是一个反斜杠后跟一个数字。因此,假设输入字符串包含
\0
,它将被转换为
\\0
或两个反斜杠,后跟一个数字零。