我正在寻找一个gsub
不尝试将其输入解释为正则表达式并使用正常的类似 C 的转义字符串的版本。
更新
这个问题是由一个奇怪的行为引发的:
text.gsub("pattern", "\\\\\\")
和
text.gsub("pattern", "\\\\\\\\")
被视为相同,并且
text.gsub("pattern", "\\\\")
被视为单个反斜杠。
我正在寻找一个gsub
不尝试将其输入解释为正则表达式并使用正常的类似 C 的转义字符串的版本。
更新
这个问题是由一个奇怪的行为引发的:
text.gsub("pattern", "\\\\\\")
和
text.gsub("pattern", "\\\\\\\\")
被视为相同,并且
text.gsub("pattern", "\\\\")
被视为单个反斜杠。
gsub的第二个参数有两层转义:
第一层是 Ruby 字符串常量。如果它写得像\\\\\\
Ruby 那样没有转义\\\
第二层是 gsub 本身:\\\
被视为\\
+\
双反斜杠被解析为 single: \\
=>\
并且末尾的单个尾随反斜杠被解析为自身。
8个反斜杠以类似的方式解析:
"\\\\\\\\" => "\\\\"
进而
"\\\\" => "\\"
所以由六个和八个反斜杠组成的常量被分解为两个反斜杠。
为了让生活更轻松,可以在 gsub 函数中使用一个块。块中的字符串常量仅通过 Ruby 层传递(感谢@Sorrow)。
"foo\\bar".gsub("\\") {"\\\\"}
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"