Мы уже видели, как выполняются простые подстановки. Методы sub и gsub предоставляют
более развитые средства, основанные на сопоставлении с образцом. Имеются
также варианты sub! и gsub!, позволяющие выполнить подстановку «на месте».
Метод sub заменяет первое вхождение строки, соответствующей образцу, другой
строкой или результатом вычисления блока:
si = "spam, spam, and eggs"
s2 = si.sub(/spam/,"bacon") # "bacon, spam, and eggs"
s3 = s2.sub(/{\w+), (\w+),/,'\2, \1,') # "spam, bacon, and eggs"
s4 = "Don't forget the spam."
s5 = s4.sub(/spam/) { Iml m.reverse } # "Don't forget the maps."
s4.sub!(/spam/) { Iml m.reverse }
# s4 теперь равно "Don't forget the maps."
Как видите, в подставляемой строке могут встречаться специальные символы
\1, \2 и т.д. Но такие специальные переменные, как $& (или ее англоязычная версия
$МАТСН), не допускаются.
Если употребляется форма с блоком, то допустимы и специальные переменные.
Если вам нужно лишь получить сопоставленную с образцом строку, то она будет
передана в блок как параметр. Если эта строка вообще не нужна, то параметр,
конечно, можно опустить.
Метод gsub (глобальная подстановка) отличается от sub лишь тем, что заменяются
все вхождения, а не только первое:
s5 = "alfalfa abracadabra"
s6 = s5.gsub(/bl]/,"xx") # "xxfxxfa xxracadxxra"
s5.gsub!(/[lfdbr]/) { Iml m.upcase + "-" }
# s5 теперь равно "aL-F-aL-F-a аВ-R-acaD-аВ-R-а"
Метод Regexp. last_match эквивалентен действию специальной переменной $&
(она же $МАТСН).
