我试着用两个这样的反斜杠替换字符串中的反斜杠:
str.gsub!("\\", "\\\\")
但是,它什么也做不了。我很困惑…
最佳答案
注意,这个答案在Ruby1.9的上下文中是givin。如红宝石
2.0有一个新的regex引擎,在该上下文中可能无效。
这工作:
str.gsub!("\\", "\\\\\\")
str.gsub!("\\", "\\\\\\\\") # also, will always work
编辑:解释(通过@vache提供的http://www.ruby-forum.com/topic/143645)
免责声明:我不熟悉ruby的regex引擎的内部工作原理,这里的任何信息都是从上面提到的文章中扣除的。
最基本的一点是替换字符串被求值2次。
第一次斜杠作为字符串中的转义符执行任务时,第二次gsub将搜索字符串中的组引用。
正如@chris johnsen提到的,6个斜杠并不总是有效的。这让我相信这样的事情正在发生:
6刀。向组引用层传递3个斜杠。尾随斜杠不被解释为转义字符,因为它后面没有任何内容,它被解释为反斜杠。最后这个层返回两个斜线。如果有任何东西在它后面,表达式将失败,因为第三个斜杠现在将作为转义字符使用。
对于8个斜杠:4个斜杠传递给组引用层。四个斜线将依次减少为两个。