Метод split разбивает строку на части и возвращает массив лексем. Ему передаются два параметра: разделитель и максимальное число полей (целое).
По умолчанию разделителем является пробел, а точнее, значение специальном
переменной $,- или ее англоязычного эквивалента $field_separator. Если же первым
параметром задана некоторая строка, то она и будет использоваться в качестве
разделителя лексем.
si = "Была темная грозовая ночь."
words = si.split # ["Была", "темная", "грозовая", "ночь]
s2 = "яблоки, груши, персики"
list = s2.split(", ") # ["яблоки", "груши", "персики"]
s3 = "львы и тигры и медведи"
zoo = s3.split!/ и /) # ["львы", "тигры", "медведи"]
Второй параметр ограничивает число возвращаемых полей, при этом действуют
следующие правила:
1. Если параметр опущен, то пустые поля в конце отбрасываются.
2. Если параметр - положительное число, то будет возвращено не более указанного
числа полей (если необходимо, весь «хвост» строки помещается i
последнее поле). Пустые поля в конце сохраняются.
3. Если параметр - отрицательное число, то количество возвращаемых полей
не ограничено, а пустые поля в конце сохраняются.
Ниже приведены примеры:
str = "alpha,beta,gamma,,"
listl = str.split(",") # ["alpha","beta","gamma"]
list2 = str.split!
Iist3 = str.split!
Iist4 = str.split!
Iist5 = str.split!
',2) # ["alpha", "beta,gamma,,"]
',4) # ["alpha", "beta", "gamma", ","]
',8) # ["alpha", "beta", "gamma", "", ""]
',-1) # ["alpha", "beta", "gamma", "", ""]
Для сопоставления строки с регулярным выражением или с другой строкой
служит метод scan:
str = "I am a leaf on the wind..."
# Строка интерпретируется буквально, а не как регулярное выражение,
arr = str.scan!"а") # ["а","а","а"]
# При сопоставлении с регулярным выражением возвращаются все соответствия,
arr = str. scan (Aw+Л # ["I", "am", "a", "leaf", "on", "the",
"wind"]
# Можно задать блок.
str.scan! A w + Л {IxI puts x }
Класс stringScanner из стандартной библиотеки отличается тем, что сохраняет
состояние сканирования, а не выполняет все за один раз:
require 'strscan'
str = "Смотри, как я парю!"
ss = StringScanner.new(str)
loop do
word = ss.scan(/\w+/) # Получать по одному слову,
break if word.nil?
puts word
sep = ss.scan(/\К+/) if Получить следующий фрагмент,
# не являющийся словом.
break if sep.nil?
end
