如何用双反斜杠替换反斜杠?

Ton*_*y R 18 ruby string replace backslash

我试图用两个反斜杠替换我的字符串中的反斜杠,如下所示:

str.gsub!("\\", "\\\\")
Run Code Online (Sandbox Code Playgroud)

但是,它没有做任何事情.我糊涂了...

Ber*_*als 16

请注意,这个答案是红宝石1.9的回答.由于ruby 2.0具有新的正则表达式引擎,因此在该上下文中可能无效.

这有效:

str.gsub!("\\", "\\\\\\") 
str.gsub!("\\", "\\\\\\\\") # also, will always work
Run Code Online (Sandbox Code Playgroud)

编辑:(通过说明http://www.ruby-forum.com/topic/143645由@vache提供)

免责声明:我不熟悉ruby的正则表达式引擎的内部工作原理,这里的任何信息都是从上面提到的文章中扣除的.

要知道的基本事情是替换字符串被评估2次.

第一次斜杠在字符串中作为转义完成它们的工作,第二次gsub将在字符串中搜索组引用.

正如@ chris-johnsen所提到的,6个斜杠并不总是有效.这让我相信这样的事情正在发生:

6斜杠.将3个斜杠传递给组参考图层.尾部斜杠不会被解释为转义字符,因为它后面没有任何内容,它被解释为反斜杠.所以最后这个图层返回2个斜杠.如果有任何内容落后于它,则表达式将失败,因为第三个斜杠现在将用作转义字符.

对于8个斜杠:将4个斜杠传递给组参考图层.四个斜线将依次减少为两个.

  • 有一个关于为什么会这样的讨论[这里](http://www.ruby-forum.com/topic/143645). (4认同)