Сопоставление и захват
match и захваченные группы
«Сопоставление и захват» — бесплатный урок Ruby Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Объекты MatchData
При вызове regex.match(string) Ruby возвращает объект MatchData при успешном совпадении или nil при неудаче.
MatchData хранит совпавший текст и все захваченные группы.
m = /world/.match('hello world')
puts m.class
puts(m[0])Полное совпадение: индекс 0
Индекс 0 в объекте MatchData всегда содержит всю совпавшую подстроку, независимо от наличия групп.
m = /\d+/.match('order 4521 shipped')
puts(m[0])
puts(m.to_s)Захватывающие группы
Круглые скобки ( ) создают захватывающие группы. К каждой группе можно обратиться по номеру, начиная с 1.
m = /(\d{4})-(\d{2})/.match('2026-05')
puts(m[1])
puts(m[2])Метод captures
captures возвращает массив всех захваченных групп, исключая полное совпадение с индексом 0.
m = /(\w+)@(\w+)/.match('alice@example')
p m.capturesДеструктуризация захваченных данных
Поскольку captures возвращает массив, результат можно сразу деструктурировать по переменным.
user, host = /(\w+)@(\w+)/.match('bob@server').captures
puts user
puts hostТекст до и после совпадения
MatchData предоставляет вспомогательные средства для работы с текстом вокруг совпадения:
pre_match— часть перед совпадениемpost_match— часть после совпадения
m = /\d+/.match('abc123xyz')
puts(m.pre_match)
puts(m.post_match)scan для поиска всех совпадений
String#scan возвращает массив всех совпадений в строке, а не только первого.
nums = '12 cats, 8 dogs, 3 birds'.scan(/\d+/)
p numsscan с группами
Если шаблон содержит группы, scan возвращает массив из массивов: по одному на каждое совпадение, содержащему захваченные данные этого совпадения.
pairs = 'a=1 b=2 c=3'.scan(/(\w)=(\d)/)
p pairsБезопасная обработка nil
Всегда помните: match возвращает nil, если ничего не совпало. Перед использованием результата проверьте, что он не равен nil.
m = /(\d+)/.match('no digits here')
if m
puts m[1]
else
puts 'no match found'
endСпециальные переменные
После успешного сопоставления Ruby устанавливает глобальные переменные: $~ содержит MatchData, а $1, $2 — захваченные группы с соответствующими номерами.
Это удобно в небольших скриптах, но в настоящем коде явное использование MatchData понятнее.
if 'name: Alice' =~ /name: (\w+)/
puts $1
endИзвлечение даты
Объединяйте группы и захваченные данные, чтобы за один шаг извлекать структурированные данные из строки.
year, month, day = /(\d{4})-(\d{2})-(\d{2})/.match('2026-05-29').captures
puts "Year #{year}, Month #{month}, Day #{day}"Быстрая проверка
Какова структура результата выражения 'a=1 b=2'.scan(/(\w)=(\d)/)?
Итоги: сопоставление и захват
Теперь вы умеете извлекать данные из совпадений:
matchвозвращает MatchData или nil- Индекс 0 содержит полное совпадение, индексы 1 и выше — группы
capturesвозвращает все группы в виде массиваscanнаходит все совпадения в строке- Всегда проверяйте результат на
nil
p 'x1 y2 z3'.scan(/([a-z])(\d)/)Часто задаваемые вопросы
Урок «Сопоставление и захват» бесплатный?
Да — полный текст урока «Сопоставление и захват» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Сопоставление и захват»?
match и захваченные группы Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Сопоставление и захват»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Литералы регулярных выражений
- Сопоставление и захват
- Подстановка
- Именованные группы и якоря