# The regex literal syntax using %r{...} allows / in your regex without escaping
new_str = my_str.sub( %r{<h5>[^<]+</h5>}, '<h2>something_else</h2>' )
Использование String#sub
вместо String#gsub
вызывает только первую замену.Если вам нужно динамически выбрать, что такое «foo», вы можете использовать интерполяцию строк в литералах регулярных выражений:
new_str = my_str.sub( %r{<h5>#{searchstr}</h5>}, "<h2>#{replacestr}</h2>" )
И снова, если вы знаете, что такое «foo», вам не нужно регулярное выражение:
new_str = my_str.sub( "<h5>searchstr</h5>", "<h2>#{replacestr}</h2>" )
или даже:
my_str[ "<h5>searchstr</h5>" ] = "<h2>#{replacestr}</h2>"
Если вам нужно запустить код для определения замены, вы можете использовать блочную форму sub:
new_str = my_str.sub %r{<h5>([^<]+)</h5>} do |full_match|
# The expression returned from this block will be used as the replacement string
# $1 will be the matched content between the h5 tags.
"<h2>#{replacestr}</h2>"
end