0

我正在寻找一个gsub不尝试将其输入解释为正则表达式并使用正常的类似 C 的转义字符串的版本。

更新

这个问题是由一个奇怪的行为引发的:

text.gsub("pattern", "\\\\\\")

text.gsub("pattern", "\\\\\\\\")

被视为相同,并且

text.gsub("pattern", "\\\\")

被视为单个反斜杠。

4

2 回答 2

3

gsub的第二个参数有两层转义:

第一层是 Ruby 字符串常量。如果它写得像\\\\\\Ruby 那样没有转义\\\

第二层是 gsub 本身:\\\被视为\\+\

双反斜杠被解析为 single: \\=>\并且末尾的单个尾随反斜杠被解析为自身。

8个反斜杠以类似的方式解析:

"\\\\\\\\" => "\\\\"

进而

"\\\\" => "\\"

所以由六个和八个反斜杠组成的常量被分解为两个反斜杠。

为了让生活更轻松,可以在 gsub 函数中使用一个块。块中的字符串常量仅通过 Ruby 层传递(感谢@Sorrow)。

"foo\\bar".gsub("\\") {"\\\\"}
于 2013-04-17T11:45:41.747 回答
2

gsub接受字符串作为第一个参数:

the pattern is typically a Regexp; if given as
a String, any regular expression metacharacters
it contains will be interpreted literally

例子:

"hello world, i am thy code".gsub("o", "-foo-")
=> "hell-foo- w-foo-rld, i am thy c-foo-de"
于 2013-03-28T12:03:07.467 回答