2013-10-09 1 views
0

Мне нужно изменить значение параметра (OFFSET =), добавив 20 к его значению. Поэтому вместо OFFSET = 0 я получаю OFFSET = 20. Теперь я не могу быть уверен, что значение OFFSET равно 0, поэтому мне нужно его извлечь. Вот то, что я пробовал:Как gsub строка с конкатенированным значением?

aNumber = "myValue=20".match(/myValue=(\d+)/)[1].to_i 
bString = "OFFSET=#{aNumber}" 
newValue = bString.gsub(/OFFSET=#{aNumber}/, "OFFSET=#{aNumber + 20}") 

Теперь, чтобы использовать #{} я, очевидно, нужна строка с "", которую я не могу использовать вместе с .gsub() или .match(). Прямо сейчас я не могу gsub, потому что он не может получить значение aNumber. Как это можно сделать?

+0

был бы супер полезно, если вы поставите примеры того, что вы хотите достичь вместо того, чтобы говорить о том, что вы можете или чего не можете сделать. – phoet

+2

Я выполнил приведенные выше команды, и я получил вывод 'OFFSET = 40'. Разве это не то, что вы хотели? –

+0

Да, и сейчас он работает - не по какой-то странной причине. Спасибо за проверку! – Severin

ответ

0

Вы можете использовать GSUB с блоком:

x = "myValue=20" 
p x.gsub(/\d+/){|x| x.to_i + 20} # => myValue=20 

или если у вас есть более длинная строка и хотите изменить только MyValue:

x = "firstValue=10, myValue=20, otherValue=30" 
p x.gsub(/(?<=myValue=)(\d+)/){|x| x.to_i + 20} # => firstValue=10, myValue=40, otherValue=30