Substitute all matches with values in Ruby regular expression
I'm having a problem with getting a Ruby string substitution going. I'm writing a preprocessor for a limited language that I'm using, that doesn't natively support arrays, so I'm hacking in my own.
I have a line:
x[0] = x[1] & x[1] = x[2]
I want to replace each instance with a reformatted version:
x__0 = x__1 & x__1 = x__2
The line may include square brackets elsewhere.
I've got a regex that will match the array use:
array_usage = /(\w+)\[(\d+)\]/
but I can't figure out the Ruby construct to replace e开发者_如何学编程ach instance one by one. I can't use .gsub()
because that will match every instance on the line, and replace every array declaration with whatever the first one was. .scan()
complains that the string is being modified if you try and use scan with a .sub()!
inside a block.
Any ideas would be appreciated!
Actaully you can use gsub, you just have to be careful to use it correctly:
s = 'x[0] = x[1] & x[1] = x[2]'
s.gsub!(/(\w+)\[(\d+)\]/, '\1__\2')
puts s
Result:
x__0 = x__1 & x__1 = x__2
精彩评论