开发者

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜