3

gsub 有一些替代方法可以将一个字符串替换为另一个字符串吗?

根据文档“如果替换是一个字符串,它将被替换为匹配的文本。它可能包含对模式捕获组的反向引用,形式为 \d,其中 d 是组号,或 \k,其中 n 是团队名字。”

我不想要这个功能..

简化示例:

"abc".gsub("b", "\\7") -> "ac"

我想要"a\7c"..

问题是用户询问了替换字符串(实际上它是一个包含路径的路径"xxx\7.0\yyy"),如果它是一个简单的固定字符串,我可以自己转义它。

我知道这行得通:"abc".gsub("b") { |x| "\\\7" }.. 但是到目前为止,我认为 ruby​​ 是一种美丽的语言,我相信应该有一个简单的替代方案,我在文档中忽略了这一点。

4

2 回答 2

6

您可以使用编辑:不,您不能)Regexp.escape转义用户提供的字符串:

user_input = '\7'
puts "abc".gsub("b", Regexp.escape(user_input))
a\7c

否则使用单引号而不是双引号进行转义:

puts "abc".gsub("b", '\\\7')
a\7c

...或使用双引号,您只需要更多转义:

puts "abc".gsub("b", "\\\\7")
a\7c

...或块表示法,但您可以跳过块变量就好了:

puts "abc".gsub("b") { '\7' }
a\7c
于 2012-06-18T07:49:28.253 回答
1
$ irb 
irb(main):001:0> replace='xxx\7.0\yyy'
=> "xxx\\7.0\\yyy"
irb(main):002:0> puts  "abc".gsub("b", replace.dump[1..-2])
axxx\7.0\yyyc
=> nil
于 2012-06-18T06:46:32.307 回答