我在进行ruby字符串替换时遇到了问题。我正在为我使用的一种有限的语言编写一个预处理器,这种语言本身不支持数组,所以我在自己的语言中进行黑客攻击。
我有句台词:

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

我想用重新格式化的版本替换每个实例:
x__0 = x__1 & x__1 = x__2

该行可能在其他地方包含方括号。
我有一个匹配数组使用的正则表达式:
array_usage = /(\w+)\[(\d+)\]/

但我无法找出ruby构造来逐个替换每个实例。我不能使用.gsub(),因为它将匹配行上的每个实例,并用第一个实例替换每个数组声明。.scan()抱怨说,如果您尝试在块内使用scan with a.sub()!,字符串将被修改。
任何想法都将不胜感激!

最佳答案

实际上,您可以使用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

09-25 17:54
查看更多