Ruby在String中用双反斜杠替换反斜杠[duplicate]

km0tfn4u  于 2023-11-18  发布在  Ruby
关注(0)|答案(1)|浏览(133)

此问题在此处已有答案

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

字符串

qvk1mo1f

qvk1mo1f1#

请注意,\\被解释为转义,即单个反斜杠。
还要注意字符串字面量使用反斜杠。有关字符串字面量的详细信息,请参阅字符串字面量。
反向引用通常会在前面加上一个反斜杠。例如,如果你想写一个反向引用\&来替换一个双引号字符串,你需要写"..\\&.."
如果你想在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"

字符串

相关问题