Регулярные выражения — синтаксис с нуля
Предыдущий шаг: введение и лаборатория.
Следующий: группы и замена.
Как движок «читает» текст
Представьте указатель на первом символе строки. Шаблон тоже читается слева направо. Каждый кусок шаблона либо совпал с текущим местом в тексте, либо поиск на этой позиции не удался.
Строка для примеров:
user_12 вошёл в систему
Шаблон user — три обычные буквы подряд. Указатель сдвигается: u → s → e → r. Совпадение: слово user.
Шаблон User без флага игнорирования регистра на user не подойдёт: регистр важен.
Литералы — «ищи как написано»
Литерал — символ без спецсмысла: буква, цифра, многие знаки препинания.
| Шаблон | Текст | Результат |
|---|---|---|
12 | user_12 | Найдёт 12 внутри слова |
_ | user_12 | Найдёт подчёркивание |
Цифры и буквы в шаблоне — это «найди такой же символ в тексте».
Точка . — «любой один символ»
. = один любой символ, кроме перевода строки (в большинстве движков).
| Шаблон | Текст | Что найдёт |
|---|---|---|
u.er | user | u, потом любой символ, потом er → user |
u.er | u_er | u_er |
Точка не означает «сколько угодно символов». Для повторений нужны квантификаторы (*, +, …).
Чтобы найти настоящую точку в тексте, её экранируют: \. (см. ниже).
Класс символов [ ... ]
В квадратных скобках перечисляют, какой один символ допустен на этом месте.
| Шаблон | Смысл |
|---|---|
[abc] | a, b или c |
[a-z] | любая строчная латинская буква |
[A-Za-z0-9] | буква или цифра |
[._-] | точка, подчёркивание или дефис |
Пример: [Tt]he — заглавная или строчная T, затем he → подойдут The и the.
Внутри [ ] точка — обычная точка, не «любой символ». Шаблон ar[.] ищет буквы a, r и символ ..
Отрицание — [^ ... ]
^ сразу после открывающей [ означает «любой символ, кроме перечисленных»:
| Шаблон | Смысл |
|---|---|
[^0-9] | всё, кроме цифры |
[^@\s]+ | подряд символы без @ и без пробела (упрощённо — кусок «до @») |
^ в начале всего шаблона — «начало строки». ^ внутри [^...] — «не этот набор». Это разные роли одного символа.Сокращения \d, \w, \s
| Код | Обычно значит | Пример |
|---|---|---|
\d | цифра 0–9 | \d\d → 12 |
\w | буква, цифра, _ (часто только латиница) | \w+ → user_12 |
\s | пробел, таб, перевод строки | \s+ → пробелы |
\D, \W, \S | «всё, кроме» соответствующего класса |
Кириллица: в JavaScript \w не совпадает с ё или п. Для русского текста явно пишут [а-яА-ЯёЁ0-9_] или используют Unicode-классы (\p{L}), если движок поддерживает.
Квантификаторы — «сколько раз повторять»
Квантификатор относится к предыдущему символу или группе.
| Символ | Сколько раз | Пример | Подходит к |
|---|---|---|---|
* | 0 и больше | ab*c | ac, abc, abbc |
+ | 1 и больше | ab+c | abc, не ac |
? | 0 или 1 | colou?r | color, colour |
{3} | ровно 3 | \d{3} | 123 |
{2,4} | от 2 до 4 | \d{2,4} | 12, 1234 |
{2,} | 2 и больше | \d{2,} | 99, 12345 |
Пример: [a-z]* — «ноль или больше строчных латинских букв подряд».
.* — «ноль или больше любых символов» (очень жадно; про жадность — в 1114).
Якоря ^ и $
| Символ | Смысл |
|---|---|
^ | начало строки (или начало строки в многострочном режиме — 1114) |
$ | конец строки |
Без якорей шаблон ищет подстроку где угодно. С якорями — всю строку целиком (удобно для форм).
| Шаблон | Строка | Результат |
|---|---|---|
ok | not ok | совпадение есть (ok внутри) |
^ok$ | not ok | нет |
^ok$ | ok | да |
Экранирование \
Символы . * + ? ^ $ [ ] ( ) { } | \ в шаблоне имеют спецсмысл. Чтобы искать их как текст, ставят \ перед символом:
| Нужен символ | В шаблоне |
|---|---|
| точка | \. |
| плюс | \+ |
| скобка | \( \) |
| обратный слэш | \\ |
В коде на Python/C# часто используют сырую строку r"..." / @"...", чтобы не удваивать слэши.
Сквозной разбор — логин пользователя
Правила (упрощённо):
- от 3 до 16 символов;
- только латиница, цифры,
_и-; - первый символ — буква.
Шаблон:
^[a-z][a-z0-9_-]{2,15}$
Читаем по частям:
| Часть | Значение |
|---|---|
^ | строка начинается здесь |
[a-z] | первая буква — одна строчная латинская |
[a-z0-9_-] | дальше буква, цифра, _ или - |
{2,15} | таких символов от 2 до 15 (вместе с первой буквой — 3…16) |
$ | строка заканчивается здесь |
Проверка:
| Строка | Подходит? | Почему |
|---|---|---|
jo-hn_doe | да | |
john12 | да | |
Jo | нет | заглавная в начале |
ab | нет | всего 2 символа |
jo hn | нет | пробел запрещён |
Тот же приём — для имени файла data_2026.csv: буквы, подчёркивание, цифры, точка перед расширением.
Сквозной разбор — уровень в логе
Строка:
2026-01-22 14:30:05 [ERROR] Connection timeout
Найти слово ERROR в скобках:
\[ERROR\]
| Часть | Значение |
|---|---|
\[ | буквальная [ |
ERROR | текст как есть |
\] | буквальная ] |
Чтобы поймать любой уровень (INFO, WARN, …), позже пригодится альтернатива и группы: \[(INFO|WARN|ERROR)\].
Шпаргалка шага 1
| Задача | Идея шаблона |
|---|---|
| Точное слово | литералы: error |
| «Что-то между» | .* (осторожно с жадностью) |
| Только цифры | ^\d+$ |
| Дата ДД-ММ-ГГГГ | ^\d{2}-\d{2}-\d{4}$ |
| Кусок до пробела | [^\s]+ |
Потренируйтесь в лаборатории (пресеты Email и Дата).
Дальше: Группы и замена →
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Последовательности действий для решения задач. Введение в алгоритмы. Примеры из реальной жизни для понимания, как на самом деле выглядят алгоритмы в программировании. Регулярные выражения — шаблон для поиска и проверки текста. Введение, лаборатория и маршрут обучения для новичков. Круглые скобки, захват частей строки, обратные ссылки, альтернатива, поиск и замена в редакторе и коде. Опережающие и ретроспективные проверки (lookahead, lookbehind), несколько условий для пароля, цена после знака доллара. Флаги i, m, g и аналоги в .NET; жадные и ленивые квантификаторы; почему .* захватывает слишком много. Готовые шаблоны для логов, email, URL, IP; grep, ripgrep, sed; типичные ошибки и различия движков. Универсальный алгоритм обработки - инициализация, загрузка, реакция, логика. Если вы начнёте какой-нибудь курс изучать, вероятнее всего как раз затронете в одной из первых тем алгоритмы сортировки и поиска. Оценка времени и памяти. Алгоритмическая сложность и анализ эффективности программ. Таким образом, нотация Большое O — это не только инструмент для теоретиков, но и практический ориентир для принятия архитектурных решений в самых разных областях разработки. P, NP, экспоненциальное время. Скорость работы программ.Алгоритмы
Тренировка алгоритмического мышления
Регулярные выражения
Регулярные выражения — группы и замена
Регулярные выражения — проверки вокруг совпадения
Регулярные выражения — флаги и жадность
Регулярные выражения — рецепты и командная строка
Алгоритм обработки
Алгоритмы сортировки и поиска
Анализ эффективности алгоритмов
Нотация Большое O
Классы временной сложности алгоритмов