为什么我不能用gsub替换字符串中的'\\ +'?

时间:2010-04-12 04:57:45

标签: ruby string gsub

请尝试以下代码:

s = '#value#'
puts s.gsub('#value#', Regexp.escape('*'))         # => '\*'
puts s.gsub('#value#', Regexp.escape('+'))         # => ''

跆拳道?它似乎被gsub完全忽略了char'\ +'(由Regexp.escape返回)。如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

这是因为特殊变量的插值。 \+将被替换为“实际参与比赛的最高编号捕获组匹配的文本”(请参阅​​http://www.regular-expressions.info/ruby.html上的特殊变量部分)

块语法实际上是对此的修复,做得很好。

答案 1 :(得分:1)

#ruby的xsdg解决了这个问题

看起来gsub的替换被解析了,所以+在这个过程的某处丢失了。解决方法是使用gsub的块语法。这条路:

s = '#value#'
puts s.gsub('#value#') { |v| Regexp.escape('+') }          # => '+'

按预期工作:)

谢谢,xsdg!