用Ruby正则表达式中的值替换所有匹配项

时间:2010-03-27 22:28:50

标签: ruby regex

我遇到了使用Ruby字符串替换的问题。我正在编写一个我正在使用的有限语言的预处理器,它本身不支持数组,所以我正在攻击我自己。

我有一句话:

x[0] = x[1] & x[1] = x[2]

我想用重新格式化的版本替换每个实例:

x__0 = x__1 & x__1 = x__2

该行可能包括其他地方的方括号。

我有一个与数组使用匹配的正则表达式:

array_usage = /(\w+)\[(\d+)\]/

但我无法弄清楚Ruby构造逐个替换每个实例。我不能使用.gsub(),因为它将匹配该行上的每个实例,并将每个数组声明替换为第一个数组声明。 .scan()抱怨如果您尝试在块内使用.sub()!扫描,则会修改字符串。

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:18)

实际上你可以使用gsub,你只需要小心正确使用它:

s = 'x[0] = x[1] & x[1] = x[2]'
s.gsub!(/(\w+)\[(\d+)\]/, '\1__\2')
puts s

结果:

x__0 = x__1 & x__1 = x__2