Литералы регулярных выражений
Основы шаблонов
«Литералы регулярных выражений» — бесплатный урок Ruby Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Что такое регулярное выражение?
Регулярное выражение — это шаблон для сопоставления с текстом. В Ruby регулярное выражение является полноценным объектом класса Regexp.
Регулярные выражения используют, чтобы искать, проверять и извлекать части строк.
- Находить слово, цифру или символ
- Проверять адреса электронной почты и номера телефонов
- Извлекать фрагменты из неструктурированного текста
pattern = /hello/
puts pattern.class
puts(pattern.match?('hello world'))Литералы регулярных выражений с косыми чертами
Самый распространённый способ записать регулярное выражение в Ruby — поместить его между двумя косыми чертами: /pattern/.
Это называется литералом регулярного выражения. Всё между косыми чертами является шаблоном.
ruby = /ruby/
puts ruby.class
puts(ruby.match?('I love ruby'))
puts(ruby.match?('I love python'))Оператор сопоставления =~
Оператор =~ проверяет строку по регулярному выражению. Он возвращает индекс первого совпадения или nil, если совпадение не найдено.
puts('hello world' =~ /world/)
puts(('hello world' =~ /xyz/).inspect)match? для логического ответа
Если нужен только ответ «да» или «нет», используйте match?. Он возвращает true или false и работает быстрее, поскольку не создаёт объект MatchData.
puts(/\d/.match?('abc123'))
puts(/\d/.match?('abcdef'))Классы символов
Класс символов в квадратных скобках сопоставляется с любым одним символом из заданного набора.
[abc]сопоставляется с a, b или c[a-z]сопоставляется с любой строчной буквой[0-9]сопоставляется с любой цифрой
puts(/[aeiou]/.match?('sky'))
puts(/[aeiou]/.match?('tree'))
puts(/[0-9]/.match?('room 7'))Сокращённые классы
Ruby предоставляет сокращённые обозначения для распространённых классов символов:
\d— цифра,\D— не цифра\w— символ слова (буква, цифра или подчёркивание)\s— пробельный символ,\S— непробельный символ
puts(/\d\d/.match?('age 42'))
puts(/\w+/.match?('hello_99'))
puts(/\s/.match?('no_space'))Точка и квантификаторы
Точка . сопоставляется с любым одним символом, кроме перевода строки. Квантификаторы управляют повторением:
*— ноль или более раз+— один или более раз?— ноль или один раз{2,4}— от 2 до 4 раз
puts(/ab+c/.match?('abbbc'))
puts(/colou?r/.match?('color'))
puts(/\d{3}/.match?('id 451'))Чередование с помощью вертикальной черты
Вертикальная черта | означает OR. Шаблон cat|dog сопоставляется с любым из этих слов.
Используйте круглые скобки, чтобы сгруппировать чередование внутри более крупного шаблона.
pet = /cat|dog/
puts(pet.match?('I have a dog'))
puts(pet.match?('I have a fish'))
puts(/^(yes|no)$/.match?('yes'))Флаг без учёта регистра
Добавьте флаг i после закрывающей косой черты, чтобы выполнять сопоставление без учёта регистра.
Также полезны флаги m (точка сопоставляется с переводом строки) и x (расширенный режим, пробельные символы игнорируются).
puts(/ruby/i.match?('I love RUBY'))
puts(/ruby/.match?('I love RUBY'))Создание регулярных выражений из строк
Регулярное выражение можно создать во время выполнения с помощью Regexp.new. Используйте Regexp.escape, чтобы безопасно включить пользовательские входные данные, которые могут содержать специальные символы.
word = 'price'
pattern = Regexp.new(word)
puts(pattern.match?('the price is high'))
puts(Regexp.escape('a.b*c'))Обзор якорей
Якоря сопоставляются с позициями, а не с символами:
^— начало строки$— конец строки\A— начало строки\z— конец строки
Позже вы изучите их подробнее.
puts(/^Hello/.match?('Hello there'))
puts(/world$/.match?('hello world'))Быстрая проверка
Что возвращает оператор =~, когда регулярное выражение совпадает со строкой?
Итоги: литералы регулярных выражений
Вы изучили основы регулярных выражений Ruby:
- Литералы регулярных выражений записываются между
/slashes/ =~возвращает индекс, аmatch?— true/false- Классы символов
[ ]и сокращённые обозначения\d \w \s - Квантификаторы
* + ? {n,m}и чередование| - Флаг
iотключает учёт регистра при сопоставлении
Далее вы научитесь извлекать совпавшие фрагменты.
puts(/\w+@\w+\.\w+/i.match?('USER@Mail.com'))Часто задаваемые вопросы
Урок «Литералы регулярных выражений» бесплатный?
Да — полный текст урока «Литералы регулярных выражений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Литералы регулярных выражений»?
Основы шаблонов Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Литералы регулярных выражений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Литералы регулярных выражений
- Сопоставление и захват
- Подстановка
- Именованные группы и якоря