Замените всеми соответствиями со значениями в регулярном выражении Ruby

У меня есть проблема с получением строкового движения замены Ruby. Я пишу препроцессор для ограниченного языка, который я использую, который исходно не поддерживает массивы, таким образом, я взламываю в своем собственном.

У меня есть строка:

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

Я хочу заменить каждый экземпляр переформатированной версией:

x__0 = x__1 & x__1 = x__2

Строка может включать квадратные скобки в другом месте.

У меня есть regex, который будет соответствовать использованию массива:

array_usage = /(\w+)\[(\d+)\]/

но я не могу выяснить конструкцию Ruby для замены каждого экземпляра один за другим. Я не могу использовать .gsub() потому что это будет соответствовать каждому экземпляру на строке и заменять каждое объявление массива тем, чем был первый. .scan() жалуется, что строка изменяется, при попытке использовать сканирование с a .sub()! в блоке.

Любые идеи ценились бы!

7
задан cflewis 27 March 2010 в 22:28
поделиться

1 ответ

На самом деле вы можете использовать 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
19
ответ дан 6 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: