我在进行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