我遇到了使用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()!
扫描,则会修改字符串。
任何想法都将不胜感激!
答案 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