Регулярные выражения — флаги и жадность
Предыдущий: проверки вокруг совпадения.
Следующий: рецепты и командная строка.
Флаги — как меняется поведение
Флаг (модификатор) подключается к шаблону и меняет правила. В JavaScript пишут после закрывающего /: /pattern/gim. В C# — свойства RegexOptions: IgnoreCase, Multiline.
| Флаг | JS | Смысл для новичка |
|---|---|---|
| без учёта регистра | i | The = the = THE |
| все совпадения | g | не останавливаться на первом |
| многострочность | m | ^ и $ на каждой строке текста |
В C# глобального g нет: один вызов Match — первое совпадение, Matches — все.
В Python re.findall ищет все; флаги задают через re.IGNORECASE и т.д.
Флаг i — регистр
Текст:
Error в логе и ERROR на сервере
| Шаблон | Найдёт |
|---|---|
Error | только Error |
Error + флаг i | Error и ERROR |
Для кириллицы поведение зависит от движка и локали; надёжнее явный класс [Ее]rror или нормализация текста до поиска.
Флаг g — все вхождения
Текст:
cat sat on the mat
| Шаблон | Поведение |
|---|---|
/at/ | первое at в cat |
/at/g | at в cat, at в mat |
В редакторе «заменить все» обычно включает аналог глобального поиска.
Флаг m — несколько строк в одном тексте
Текст:
строка one
строка two
Шаблон ^строка без m — только если весь текст начинается со слова строка.
С флагом m ^ и $ привязаны к началу и концу каждой строки (между \n).
Пример: найти at в конце каждой строки:
/at$/gm
Подойдут окончания one / two, где есть at… В учебных фразах чаще срабатывает на cat, mat — смысл тот же: якорь к строке, а не ко всему файлу.
Жадность — главная ловушка новичка
По умолчанию квантификаторы жадные: берут максимум символов, который ещё позволяет остаток шаблона сойтись.
Текст:
<div>A</div> и <div>B</div>
Шаблон:
<div>.*</div>
| Этап | Что происходит |
|---|---|
<div> | совпало с первым тегом |
.* | жадно тянет всё до последнего возможного |
</div> | подстраивается под последний </div> |
Одно огромное совпадение: от первого <div> до последнего </div> — внутри и A, и B.
Ленивый квантификатор ? после *, +, {}
Добавьте ? после квантификатора — повторение станет ленивым (минимальным).
| Жадный | Ленивый |
|---|---|
.* | .*? |
.+ | .+? |
\d{2,5} | \d{2,5}? |
Тот же текст, шаблон:
<div>.*?</div>
Результат: два совпадения — <div>A</div> и <div>B</div>.
Потренируйтесь в лаборатории — пресет Жадный vs ленивый.
Когда что использовать
| Задача | Подсказка |
|---|---|
| Вытащить первый блок | ленивый .*? или точнее — «всё кроме >»: <div>[^<]*</div> |
| До конца строки | .* с якорем $ |
| JSON/HTML с вложенностью | regex плохо справляется — парсер |
Сводка
| Проблема | Решение |
|---|---|
| Нашёл только первое | флаг g или цикл Matches |
The не находит THE | флаг i |
^ не работает во 2-й строке файла | флаг m |
.* съело полстраницы | .*? или уточнить класс символов |
Дальше: Рецепты и командная строка →
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Последовательности действий для решения задач. Введение в алгоритмы. Примеры из реальной жизни для понимания, как на самом деле выглядят алгоритмы в программировании. Регулярные выражения — шаблон для поиска и проверки текста. Введение, лаборатория и маршрут обучения для новичков. Как читать шаблон слева направо — литералы, точка, классы символов, квантификаторы, якоря. Разбор логина по частям. Круглые скобки, захват частей строки, обратные ссылки, альтернатива, поиск и замена в редакторе и коде. Опережающие и ретроспективные проверки (lookahead, lookbehind), несколько условий для пароля, цена после знака доллара. Готовые шаблоны для логов, email, URL, IP; grep, ripgrep, sed; типичные ошибки и различия движков. Универсальный алгоритм обработки - инициализация, загрузка, реакция, логика. Если вы начнёте какой-нибудь курс изучать, вероятнее всего как раз затронете в одной из первых тем алгоритмы сортировки и поиска. Оценка времени и памяти. Алгоритмическая сложность и анализ эффективности программ. Таким образом, нотация Большое O — это не только инструмент для теоретиков, но и практический ориентир для принятия архитектурных решений в самых разных областях разработки. P, NP, экспоненциальное время. Скорость работы программ.Алгоритмы
Тренировка алгоритмического мышления
Регулярные выражения
Регулярные выражения — синтаксис с нуля
Регулярные выражения — группы и замена
Регулярные выражения — проверки вокруг совпадения
Регулярные выражения — рецепты и командная строка
Алгоритм обработки
Алгоритмы сортировки и поиска
Анализ эффективности алгоритмов
Нотация Большое O
Классы временной сложности алгоритмов