请尝试以下代码:
s = '#value#'
puts s.gsub('#value#', Regexp.escape('*')) # => '\*'
puts s.gsub('#value#', Regexp.escape('+')) # => ''
跆拳道?它似乎被gsub完全忽略了char'\ +'(由Regexp.escape返回)。如何解决这个问题?
答案 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!