我正在寻找gsub
的版本,它不会尝试将其输入解释为正则表达式,并使用普通的类似C的转义字符串。Ruby中gsub的非正则表达式版本
更新
这个问题由一个奇怪的行为发起:
text.gsub("pattern", "\\\\\\")
和
text.gsub("pattern", "\\\\\\\\")
被视为相同,
text.gsub("pattern", "\\\\")
被视为单个反斜杠。
我正在寻找gsub
的版本,它不会尝试将其输入解释为正则表达式,并使用普通的类似C的转义字符串。Ruby中gsub的非正则表达式版本
更新
这个问题由一个奇怪的行为发起:
text.gsub("pattern", "\\\\\\")
和
text.gsub("pattern", "\\\\\\\\")
被视为相同,
text.gsub("pattern", "\\\\")
被视为单个反斜杠。
有转义GSUB的第二参数的两个层:
第一层是红宝石串不变。如果它是这样写\\\\\\
它是由红宝石转义像\\\
所述第二层GSUB本身:\\\
被处理像\\
+ \
双反斜线被分解为单个:\\
=>\
和单尾随最后的反斜杠被解析为自身。
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"
那么为什么要替换为两个反斜杠\\我必须写六个反斜杠? “\\\\\\”见这里:http://stackoverflow.com/questions/1542214/weird-backslash-substitution-in-ruby – Paul
不太确定你的意思是......“”foo \\\\ bar “.gsub(”\\\\“,” - “)'产生''foo-bar”'(也是''foo \\\\ bar“.count('\\')== 2')只要你用字符串操作,就是......如果你用相反的方式来做(用两个\ s替换它) - 答案就在你链接的线程中(可怕的细节;);出于这个原因(和其他清晰的原因),我会建议你使用'gsub'的块语法而不是两个参数 – Sorrow
试着用一个反斜杠代替双反斜杠,你会看到。 – Paul