Вход/Регистрация
Программирование на языке Ruby
вернуться

Фултон Хэл

Шрифт:

str = "Шалтай-Болтай"

sub1 = str[7,4] # "Болт"

sub2 = str[7,99] # "Болтай" (выход за границу строки допускается)

sub3 = str[10,-4] # nil (отрицательная длина)

Важно помнить, что это именно смещение и длина (число символов), а не начальное и конечное смещение.

Если индекс отрицателен, то отсчет ведется от конца строки. В этом случае индекс начинается с единицы, а не с нуля. Но при нахождении подстроки указанной длины все равно берутся символы правее, а не левее начального:

str1 = "Алиса"

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
, возвращается ASCII-код символа в соответствующей позиции (или
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
), не допускаются.

  • Читать дальше
  • 1
  • ...
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: