Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
sub1 = str1[-3,3] # "иса"
str2 = "В Зазеркалье"
sub3 = str2[-8,6] # "зеркал"
Можно задавать диапазон. Он интерпретируется как диапазон позиций внутри строки. Диапазон может включать отрицательные числа, но в любом случае нижняя граница не должна быть больше верхней. Если диапазон «инвертированный» или нижняя граница оказывается вне строки, возвращается
nil
str = "Уинстон Черчилль"
sub1 = str[8..13] # "Черчил"
sub2 = str[-4..-1] # "илль"
sub3 = str[-1..-4] # nil
sub4 = str[25..30] # nil
Если задано регулярное выражение, то возвращается строка, соответствующая образцу. Если соответствия нет, возвращается
nil
str = "Alistair Cooke"
sub1 = str[/1..t/] # "list"
sub2 = str[/s.*r/] # "stair"
sub3 = str[/foo/] # nil
Если задана строка, то она и возвращается, если встречается в качестве подстроки в исходной строке; в противном случае возвращается
nil
str = "theater"
sub1 = str["heat"] # "heat"
sub2 = str["eat"] # "eat"
sub3 = str["ate"] # "ate"
sub4 = str["beat"] # nil
sub5 = str["cheat"] # nil
Наконец, в тривиальном случае, когда в качестве индекса задано одно число
Fixnum
nil
str = "Aaron Burr"
ch1 = str[0] # 65
ch1 = str[1] # 97
ch3 = str[99] # nil
Важно понимать, что все описанные выше способы могут использоваться не только для доступа к подстроке, но и для ее замены:
str1 = "Шалтай-Болтай"
str1[7,3] = "Хва" # "Шалтай-Хватай"
str2 = "Алиса"
str2[-3,3] = "ександра" # "Александра"
str3 = "В Зазеркалье"
str3[-9,9] = "стеколье" # "В Застеколье"
str4 = "Уинстон Черчилль"
str4[8..11] = "X" # "Уинстон Хилль"
str5 = "Alistair Cooke"
str5[/e$/] ="ie Monster" # "Alistair Cookie Monster"
str6 = "theater"
str6["er"] = "re" # "theatre"
str7 = "Aaron Burr"
str7[0] = 66 # "Baron Burr"
Присваивание выражения, равного
nil
2.13. Подстановка в строках
Мы уже видели, как выполняются простые подстановки. Методы
sub
gsub
sub!
gsub!
Метод
sub
s1 = "spam, spam, and eggs"
s2 = s1.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/) { |m| m.reverse } # "Don't forget the maps."
s4.sub!(/spam/) { |m| m.reverse }
# s4 теперь равно "Don't forget the maps."
Как видите, в подставляемой строке могут встречаться специальные символы
1
2
$&
$MATCH
Если употребляется форма с блоком, то допустимы и специальные переменные. Если вам нужно лишь получить сопоставленную с образцом строку, то она будет передана в блок как параметр. Если эта строка вообще не нужна, то параметр, конечно, можно опустить.
Метод
gsub
sub
s5 = "alfalfa abracadabra"
s6 = s5.gsub(/a[bl]/,"xx")# "xxfxxfa xxracadxxra"
s5.gsub!(/[lfdbr]/) { |m| m.upcase + "-" }
# s5 теперь равно "aL-F-aL-F-a aB-R-acaD-aB-R-a"
Метод
Regexp.last_match
$&
$MATCH
2.14. Поиск в строке
Помимо различных способов доступа к подстрокам, есть и другие методы поиска в строке. Метод
index
nil
str = "Albert Einstein"
pos1 = str.index(?E) # 7