改变替换的情况

时间:2011-08-15 01:17:00

标签: ruby

我有以下内容:text.gsub(/(lower) (upper)/, '\1 \2')

我可以只替换\2大写吗?

类似于:sed -e 's/\(abc\)/\U\1/'

这可以在Ruby中使用吗?

3 个答案:

答案 0 :(得分:6)

请参阅gsub文档:

str.gsub(pattern){| match | block}→new_str

在块形式中,当前匹配字符串作为参数传入,并且将适当地设置诸如$ 1,$ 2,$`,$&和$'的变量。块返回的值将替换每次调用的匹配。

"a lower upper b".gsub(/(lower) (upper)/){|s| $1 + " " + $2.upcase}

答案 1 :(得分:2)

gsub接受一个块参数,该参数为每个匹配运行,并将匹配作为参数传递 - 因此您可以随意执行任何操作!例如,要大写字符串中的每个单词:

"ruby blocks are pretty awesome".gsub(/\w+/) do |match|
  match.capitalize
end
#=> "Ruby Blocks Are Pretty Awesome"

答案 2 :(得分:2)

我是Ruby的新手 - 几天前刚刚开始使用它,但也许这会起作用?您将能够将反向引用作为bock中名为$n的变量:

new_text = text.gsub(/(lower) (upper)/){
    "#{$1} #{$2.upcase}"
}

<强>更新
看起来Brandon在8分钟左右击败了我:)这与AFAIK几乎完全相同