Шпаргалка по регулярным выражениям: полный справочник
Регулярные выражения (regex) являются одним из самых мощных и универсальных инструментов в арсенале разработчика. Они позволяют сопоставлять, искать и манипулировать текстом с помощью точных шаблонов, которые было бы практически невозможно выразить в обычном коде. Независимо от того, проверяете ли вы пользовательский ввод, парсите логи, извлекаете данные из документов или выполняете поиск и замену в редакторе кода, regex предоставляет лаконичный и эффективный способ решения задач обработки текста.
Что такое регулярные выражения?
Базовый синтаксис
| Символ | Значение | Пример |
|---|---|---|
| . | Любой символ, кроме перевода строки | . |
| a, 1, @ | \ | Экранирует специальный символ |
| \. | . | | |
| Чередование (ИЛИ) | a|b | a или b |
| () | Группа захвата | (abc) |
| abc | ^ | Начало строки |
| ^Hello | Hello world | $ |
| Конец строки | world$ | Hello world |
| \b | Граница слова | \bcat\b |
| cat | \B | Не граница слова |
Продвинутые границы
| Совпадение | Символ | Значение |
|---|---|---|
| \Bcat\B | locate | \A |
| Начало строки (не зависит от флага m) | \AStart | Start |
| \Z | Конец строки (перед последним переводом строки) | End\Z |
| End | \z | Конец строки (абсолютный) |
| End\z | End | \d |
| Цифра | \d | 0-9 |
Предопределённые классы символов
| Символ | Значение | Символ |
|---|---|---|
| \w | Символ слова (буква, цифра, подчёркивание) | \w |
| a-z, A-Z, 0-9, _ | \s | Пробельный символ |
| \s | пробел, табуляция, перевод строки | \D |
| Не цифра | \D | Любой символ, кроме 0-9 |
Пользовательские классы символов
| Значение | Шаблон | Назначение |
|---|---|---|
| \W | Не символ слова | \W |
| Любой символ, кроме букв, цифр, _ | \S | Не пробельный символ |
| \S | Любой символ, кроме пробельных | [abc] |
| Любой символ из a, b или c | [abc] | a, b, c |
| [^abc] | Любой символ, кроме a, b или c | [^abc] |
Якоря и границы
Эта шпаргалка охватывает каждый основной синтаксический элемент regex от базовых символов до продвинутых техник, таких как Lookahead и обратные ссылки. Каждый раздел включает практические примеры и распространённые случаи использования, которые вы можете немедленно применить.
Жадные и ленивые квантификаторы
Якоря сопоставляют позиции в строке, а не символы. Они утверждают, что что-то истинно о позиции, но не потребляют символы. Якоря необходимы для проверки того, что шаблоны появляются в определённых позициях, а не где-либо в строке.
Захватывающие группы
Классы символов — это фундаментальные строительные блоки regex, позволяющие сопоставлять определённые категории символов. Вместо перечисления каждого возможного символа вы можете использовать класс символов для сопоставления с целым диапазоном или категорией.
Незахватывающие группы
Квантификаторы определяют, сколько раз должен появляться предыдущий элемент, чтобы совпадение было успешным. Они превращают статические шаблоны в гибкие, которые могут сопоставлять текст переменной длины.
Именованные группы
Группы позволяют объединять части шаблона вместе, применяя квантификаторы ко всей группе, захватывая сопоставленный текст для последующего использования и создавая сложные логические структуры.
Обратные ссылки
Lookahead и Lookbehind (коллективно называемые Lookaround) — это утверждения нулевой ширины, которые проверяют, что текст существует (или не существует) после или до текущей позиции, не потребляя символы. Они позволяют создавать сложные условия сопоставления, которые были бы невозможны с помощью только обычных совпадений.
Позитивный и негативный Lookahead
Флаги изменяют поведение всего шаблона regex. Они управляют чувствительностью к регистру, многострочным сопоставлением, обработкой пробелов и многим другим.
Классы символов
Позитивный и негативный Lookbehind
Вот проверенные, готовые к использованию шаблоны regex для распространённых задач валидации. Они были протестированы на миллионах реальных входных данных и уравновешивают точность с практичностью.
- Тестируйте инкрементально: стройте regex по частям, тестируя каждую часть перед добавлением следующей. Это значительно упрощает отладку.
- Используйте якоря для полей ввода: всегда используйте ^ и $ при валидации пользовательского ввода, чтобы убедиться, что вся строка соответствует шаблону, а не только её часть.
- Будьте конкретны в классах символов: используйте \d вместо [0-9] и \w вместо [a-zA-Z0-9_] для лучшей читаемости и переносимости между языками.
- Избегайте катастрофического обратного отслеживания: вложенные жадные квантификаторы могут вызвать экспоненциальное время выполнения. Упрощайте шаблоны и используйте атомарные группы, когда это возможно.
Практические примеры Lookahead
Нужно протестировать или отладить шаблон regex? Попробуйте наш бесплатный онлайн-тестер регулярных выражений с подсветкой совпадений в реальном времени и объяснением шаблонов.
Квантификаторы
- Документируйте сложные шаблоны: используйте режим свободного интервала (флаг x) и комментарии для объяснения сложных шаблонов regex. Будущие разработчики будут вам благодарны.
- Знайте свой движок: разные языки программирования используют разные движки regex с разными возможностями и синтаксисом. То, что работает в JavaScript, может не работать в Python или Java.
- Предпочитайте непротиворечивые шаблоны: избегайте шаблонов, которые могут сопоставлять пустые строки (например, a*), если это не намеренно, так как они могут вызвать бесконечные циклы в некоторых операциях замены.
- Anchor your patterns with ^ and $ when you need to match the entire string
- Pre-compile regex patterns when using them repeatedly in loops
\b^$when searching within larger text
Группы и захват
<=...) утверждает, что текст существует до. Негативный Lookbehind (?Тестер регулярных выраженийRegex Cheat Sheet
Lookahead и Lookbehind
Валидация email
Простые шаблоны email, такие как /\S+@\S+\.\S+/, работают для базового обнаружения, но могут иметь ложные срабатывания. Более точный шаблон: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/. Однако regex не может идеально валидировать все email-адреса в соответствии со спецификацией RFC 5322. Для критически важной валидации отправьте письмо для подтверждения.
Валидация URL
Regex может работать по-разному в разных языках программирования из-за различий в движках regex. Распространённые проблемы включают: экранирование строк (возможно, потребуется двойное экранирование обратных слешей), флаги по умолчанию (некоторые движки используют многострочный режим по умолчанию) и отсутствие поддержки продвинутых функций, таких как Lookbehind. Всегда тестируйте regex в целевом окружении.
Валидация даты
Наиболее важные символы: . (любой символ), * (ноль или более), + (один или более), ? (ноль или один, или ленивый), ^ (начало строки), $ (конец строки), \d (цифра), \w (символ слова), \s (пробельный символ), [] (класс символов), () (группа захвата), | (чередование) и \ (экранирование). Освоение этих символов покрывает 90% всех потребностей regex.
Валидация телефона
Lookahead and lookbehind are zero-width assertions that check for patterns without consuming characters. (?=pattern) is a positive lookahead that matches if the pattern follows. (?<=pattern) is a positive lookbehind that matches if the pattern precedes. Negative versions use ! instead of =.
Валидация пароля
Add the i flag after the closing delimiter to make the entire pattern case-insensitive. In JavaScript, use /pattern/i. In Python, use re.IGNORECASE or re.I as a flag. You can also use (?i) inline to make specific portions case-insensitive.
ToolHub's collection of 300+ free online tools including regex tester, cheat sheets, and more — no sign-up required.