ex exxam.ruВсе задания
практикасправочникпесочницагенератор заданийбез регистрации

Регулярные выражения: справочник и тренажёр

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

Что такое регулярное выражение

Представьте, что у вас есть большой текст и нужно найти в нём не просто слово «кот», а, например, «любое слово из трёх букв, которое начинается на „к“ и заканчивается на „т“».

Регулярные выражения (или «регэкспы») — это способ описать шаблон (правило), по которому программа будет искать, проверять или заменять текст. Простыми словами, это язык для описания текстовых шаблонов.

Аналогия из жизни

Представьте, что вы работаете в библиотеке и отбираете книги по очень странному критерию:

  • название начинается на букву «А»;
  • дальше идут ровно три цифры;
  • заканчивается всё словом «роман».

Вы не перебираете все книги подряд, а пишете помощнику инструкцию: «Ищи те, где сначала буква А, потом три любые цифры, потом слово роман». Регулярное выражение — это такая же инструкция, только для компьютера.

Из чего это состоит

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

  • Обычные буквы (кот) — ищут просто «кот».
  • Точка (.) — «любой один символ»: шаблон к.т найдёт «кот», «кит», «к%т».
  • Звёздочка (*) — «ноль или больше повторений предыдущего»: ко*т найдёт «кт», «кот», «коот», «кооот».
  • Квадратные скобки ([а-я]) — «любая буква из диапазона»; [0-9] — любая цифра.
  • Фигурные скобки ({3}) — «ровно 3 раза»: [0-9]{3} — ровно три цифры.

Зачем это нужно

  1. Поиск и замена. Найти в документе все номера телефонов или адреса почты и заменить их на что-то другое.
  2. Проверка данных (валидация). Убедиться, что введён правильный адрес почты (есть «собака» и точка) или что пароль содержит и цифры, и буквы.
  3. Программирование. Разбор текста, вытаскивание нужной информации из логов, обработка данных.

Важное предупреждение

Регулярные выражения выглядят как «каша из символов». Вот пример проверки адреса почты:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

Такие шаблоны сложно читать и легко ошибиться. Запомните главное: регулярка — это не поиск конкретного слова, а описание правил, которым это слово должно соответствовать.

Экранирование спецсимволов

Обычные символы совпадают сами с собой: шаблон кот найдёт «кот». Если же нужен сам спецсимвол (точка, скобка, звёздочка), его «экранируют» обратным слешем: \. — точка, \( — открывающая скобка, \* — звёздочка.

Классы символов

Класс […] — это «один из перечисленных символов». [тТ] — «т или Т». Внутри класса задают диапазоны: [А-Я] — заглавные русские буквы, [а-я] — строчные. Любая русская буква — [А-Яа-яЁё] (буквы «ё» добавляют отдельно).

Крышка в начале класса, [^…], означает «любой символ, кроме перечисленных»: [^А-Яа-я] — не русская буква.

Дефис в классе

Дефис внутри класса означает диапазон, поэтому сам дефис ставят в самый конец: [А-Яа-яЁё-] — буквы и дефис. Тогда дефис считают частью слова: «что-то» — одно сложное слово.

«Или», группы и повторы

A|B — «A или B». Круглые скобки группируют: (то|на). Повторы: * — ноль и более раз, + — один и более, ? — ноль или один, {2,3} — от двух до трёх раз.

Границы слов

Обычно границу слова задают как \b, но в JavaScript и части редакторов \b считает буквами только латиницу — с кириллицей он не работает. Поэтому в русском тексте границу задают явным классом [А-Яа-яЁё-].

Просмотры (lookaround)

Просмотр проверяет соседний символ, но не включает его в совпадение: (?=…) — «дальше идёт …», (?!…) — «дальше не …», (?<=…) — «перед этим было …», (?<!…) — «перед этим не …».

Так из сочетания делают «внутри слова»: [тТ]о(?=[А-Яа-яЁё-])|(?<=[А-Яа-яЁё-])[тТ]о.

Флаги

Флаги включают режимы поиска: i — не учитывать регистр, g — искать все совпадения, u — юникодный режим (корректная работа с не-латиницей). В задании 10 регистр удобнее задавать классом [тТ], а не флагом: тогда оба варианта написания видны прямо в шаблоне.

Готовые формулы для задания 10

Что найти в текстеШаблон
все вхождения «то» и «То»[тТ]о
только внутри слов (дефис — часть слова)[тТ]о(?=[А-Яа-яЁё-])|(?<=[А-Яа-яЁё-])[тТ]о
только отдельные слова(?<![А-Яа-яЁё-])[тТ]о(?![А-Яа-яЁё-])
только строчное «то»то
слово целиком, содержащее «то»[А-Яа-яЁё-]*то[А-Яа-яЁё-]*

Движки и совместимость

Синтаксис почти одинаков в LibreOffice Writer (движок ICU), JavaScript и Python, но детали отличаются. Практический вывод: не полагайтесь на \b для кириллицы и проверяйте шаблон на небольшом фрагменте в песочнице, прежде чем применять ко всему документу.

Как пользоваться этим режимом. Изучите теорию и попробуйте шаблоны в песочнице: совпадения подсветятся, а счётчик покажет их число. Затем перейдите к тренажёру — выберите уровень и либо выберите готовый шаблон, либо напишите свой.

Песочница: проверь шаблон

Введите регулярное выражение — совпадения в тексте подсветятся, а счётчик покажет их число. Текст можно заменить на свой.

Что-то случилось тогда, и он понял, что это не то, что нужно. Кто-то сказал: «Это было то самое место».

Совпадений: 12.

Тренажёр: найди правильный ответ

Найдите регулярное выражение, которое правильно находит все подходящие вхождения по условию.

Загрузка практикума…

Частые вопросы

Зачем регулярные выражения в задании 10?
Они позволяют одним шаблоном найти в тексте именно то, что нужно по условию: сочетание внутри слов, только отдельные слова, с учётом дефиса и регистра. Это заменяет ручной перебор.
Почему не работает «\b»?
В JavaScript (и в ряде редакторов) граница слова \b построена только на латинице, цифрах и подчёркивании, поэтому для кириллицы она не срабатывает. Вместо неё используют явный класс [А-Яа-яЁё-].
Что такое lookaround?
Это проверка соседних символов «вперёд» (?=…) или «назад» (?=…), которая не включает их в совпадение. Так выделяют ровно сочетание, но требуют, чтобы рядом была буква или дефис.
Как устроен тренажёр?
В режиме «выбор» нужно узнать правильный шаблон среди похожих, в режиме «свой шаблон» — написать выражение самому. Совпадения подсвечиваются сразу, а «Проверить» сверяет их с эталоном.
Как проверяется шаблон?
Сравниваются не строки, а найденные вхождения: шаблон должен выделить ровно те места, где сочетание подходит под условие. Поэтому подходит и более длинный шаблон — например, выделяющий слово целиком.
Совпадает ли синтаксис в разных редакторах?
В основном да, но есть различия. LibreOffice Writer использует движок ICU; JavaScript и Python близки к нему, однако классы и границы слов могут отличаться. Проверяйте шаблон на фрагменте текста.

Разбор задания 10Все задания