ruby - 如何转义 gsub 替换字符串中的反向引用

标签 ruby

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

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

我不想要这个功能..

简化示例:

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

我想要"a\7c"..

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

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

最佳答案

您可以使用(编辑:不可以)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

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

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

关于ruby - 如何转义 gsub 替换字符串中的反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11077800/

相关文章:

ruby-on-rails - Vim/command-T : Ignoring "gem-name" because its extensions are not built. 尝试 gem pristine "gem-name"

ruby - 为什么使用 AJAX 的 rspec 示例无法正常工作?

ruby-on-rails - 我的应用程序的 coverband gem

ruby-on-rails - Rails Bundle Install 使用 Docker 失败

ruby - 在 Ruby 中处理单个值或数组的最佳方法是什么

php - Ruby On Rails 服务容器

Ruby 多线程问题

javascript - Nokogiri - 查找 javascript 数组内的值

ruby - Rails 3 应用程序的 respond_with 语法有奇怪的行为吗?

ruby-on-rails - Gem Rmagick 安装错误:extconf.rb:171:in `` ': No such file or directory - convert -version (Errno::ENOE NT)