此问题在此处已有答案:
Weird backslash substitution in Ruby(5个答案)
11天前关闭
我有一个小问题困扰着我。我需要将字符串中的每个反斜杠都加倍,例如,如果有一个字符串1 \ 2
,我希望将其转换为1 \\ 2
。我不明白为什么下面的代码会失败。你能帮助我吗?PS。请不要告诉我拆分字符串并对列表元素进行操作然后连接;)我需要知道这是sub
中的一个bug还是我遗漏了什么。再见
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
字符串
1条答案
按热度按时间qvk1mo1f1#
请注意,
\\
被解释为转义,即单个反斜杠。还要注意字符串字面量使用反斜杠。有关字符串字面量的详细信息,请参阅字符串字面量。
反向引用通常会在前面加上一个反斜杠。例如,如果你想写一个反向引用
\&
来替换一个双引号字符串,你需要写"..\\&.."
。如果你想在
replacement
中写一个非反向引用的字符串\&
,你首先需要转义反斜杠,以防止这个方法将其解释为反向引用,然后你需要再次转义反斜杠,以防止字符串字面量消耗它们:"..\\\\&.."
。这意味着你需要更多的反斜杠:
字符串