我想用反斜杠单引号(\'
)替换所有出现的单引号('
)。我试着用gsub
这样做,但我得到部分字符串重复:Gsub导致部分字符串被替换
a = "abc 'def' ghi"
a.gsub("'", "\\'")
# => "abc def' ghidef ghi ghi"
有人可以解释为什么发生这种情况,什么解决这是什么?
我想用反斜杠单引号(\'
)替换所有出现的单引号('
)。我试着用gsub
这样做,但我得到部分字符串重复:Gsub导致部分字符串被替换
a = "abc 'def' ghi"
a.gsub("'", "\\'")
# => "abc def' ghidef ghi ghi"
有人可以解释为什么发生这种情况,什么解决这是什么?
发生这种情况是因为"\\'"
作为gsub
的替代参数出现时具有特殊含义,即它表示匹配后的子字符串。
做你想做什么,你可以使用块:
注意反斜杠在字符串逃过检查,所以它显示为\\
。
您不需要使用块表单;你只需要在另一个''''''前面加上另一个'''''',在双引号中看起来像''\\\\'“':'a.gsub(”'“,”\\\\ '“)' –
这是可能的,你只需要更高剂量逃逸的:
a.gsub(/'/, "\\\\'")
结果:
ABC \ '高清\' GHI
这与a.gsub(”'“,”\\\'“) – Bunti
相同,谢谢,它对我很有用。 –
你"\\'"
实际上代表文字\'
,因为反斜杠转义下一个反斜杠。而Ruby正则表达式中的文字\'
实际上是一个特殊变量,它插入到匹配部分后面的字符串部分。所以这里发生了什么。
abc 'def' ghi
^
插入点指向第一个匹配,'
。将其替换为右边的所有东西,即def' ghi
。
abc def' ghidef' ghi
++++++++
现在找到下一场比赛:
abc def' ghidef' ghi
^
再次,什么东西都在它的右边更换'
,即ghi
。
abc def' ghidef ghi ghi
++++
谢谢您的详细解释! –
https://stackoverflow.com/questions/1542214/weird-backslash-substitution-in-ruby应该回答你的问题 – bjhaid
感谢您的快速回复bjhaid!这回答了我的问题。你应该发布它作为答案。然后我可以提高你的评价。 –