У меня есть проблема с получением строкового движения замены 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()!
в блоке.
Любые идеи ценились бы!
На самом деле вы можете использовать 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