我正在尝试用两个反斜线替换字符串中的反斜线,如下所示:
str.gsub!("\\", "\\\\")但是,它什么也做不了。我很困惑..。
发布于 2011-06-02 09:36:42
注意,这个答案是在Ruby1.9的上下文中给出的。由于ruby 2.0有一个新的正则表达式引擎,因此它在该上下文中可能无效。
这是可行的:
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斜杠被传递到组参考层。尾部斜杠不被解释为转义字符,因为它后面没有任何东西,它被解释为反斜杠。所以最后这一层返回2个斜杠。如果后面有任何东西,则表达式将失败,因为第三个斜杠现在将用作转义字符。
对于8个斜杠:4个斜杠被传递到组参考层。四个斜杠将依次减少到两个。
https://stackoverflow.com/questions/6209480
复制相似问题