0Pricing
Ruby Academy · Урок

Сопоставление и захват

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 nums

scan с группами

Если шаблон содержит группы, 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 — локальная установка не требуется.

Все уроки этого курса

  1. Литералы регулярных выражений
  2. Сопоставление и захват
  3. Подстановка
  4. Именованные группы и якоря
← Назад к Ruby Academy