此问题已在此处有答案:
Why does String#gsub double content?(3个答案)
6天前关闭。
我只是不明白这种行为是否是预期的。
我尝试将字符串中的'
字符替换为2个字符\'
(基本上是通过在引号之前添加\
来转义引号)
我天真的方法是这个str.gsub("'", "\\'")
,但我得到了奇怪的结果。我最终使用str.gsub("'") { "\\'" }
使它工作,但我想在这里了解gsub的行为。
以下是我尝试的:
str2 = "super'test"
=> "super'test"
str2.gsub("'", "\\'")
=> "supertesttest" # <==== ??? Where does that comes from ?
# Further tests are to understand if `gsub` behaves as I would expect, and it does...
str2.gsub("'", "")
=> "supertest"
str2.gsub("'", "\\")
=> "super\\test"
str2.gsub("t", "ab")
=> "super'abesab"
str2.gsub("t", "\b")
=> "super'\bes\b"
str2.gsub("t", "\\b")
=> "super'\\bes\\b"
str2.gsub("t", "\'")
=> "super''es'"
str2.gsub("'", "\'")
=> "super'test"
str2.gsub("'", "\\ '")
=> "super\\ 'test"
str2.gsub("'", "\\'")
=> "supertesttest" # I really don't get it....
str2.gsub("'") { "\\'" }
=> "super\\'test" # This works
1条答案
按热度按时间snvhrwxg1#
引用文档:
\'
对应$'
,包含匹配后的字符串。[...]
请注意,
\\
被解释为转义,即单个反斜杠。[...]
如果你想在
replacement
中写一个非反向引用的字符串\&
,你首先需要转义反斜杠以防止这个方法将其解释为反向引用,然后你需要再次转义反斜杠以防止字符串字面量消耗它们:"..\\\\&.."
。您可能希望使用块形式,以避免大量的反斜杠。