我有一个小问题困扰着我。我需要将字符串中的每个反斜杠加倍,例如,如果有一个字符串
1 \ 2
,我希望将其转换为1 \\ 2
。我不明白为什么下面的代码失败。你能帮我吗?附言。请不要告诉我拆分字符并对列表元素进行操作,然后加入;)我需要知道这是否是 sub
中的错误,或者我是否遗漏了某些内容。再见
irb> s = '1 \\ 2'
irb> puts s
1 \ 2
irb> s.size
5
irb> s[2]
"\\"
# now i try to do the substitution
irb> s2 = s.sub('\\', '\\'*2) # or '\\\\'
"1 \\ 2"
irb> s2.size
5
请注意,
被解释为转义符,即单个反斜杠。\\
另请注意,字符串文字消耗反斜杠。有关字符串文字的详细信息,请参阅字符串文字。
反向引用前面通常有一个额外的反斜杠。例如,如果您想编写反向引用
来替换双引号字符串文字,则需要编写\&
。"..\\&.."
如果你想在
中写入一个非反向引用字符串\&
,你需要首先转义反斜杠以防止该方法将其解释为反向引用,然后你需要转义反斜杠再次防止字符串文字消耗它们:replacement
。"..\\\\&.."
https://ruby-doc.org/3.2.2/String.html#class-String-label-Substitution+Methods
这意味着您需要更多反斜杠:
>> "1 \\ 2".sub("\\", "\\"*4)
=> "1 \\\\ 2"
# or
>> "1 \\ 2".sub("\\", Regexp.escape("\\\\"))
=> "1 \\\\ 2"