Загрузка...
Загрузка...
Полная шпаргалка по регулярным выражениям: метасимволы, квантификаторы, группы, lookahead/lookbehind, флаги. Справочник с примерами для разработчиков.
Подробное руководство по регулярным выражениям. Синтаксис, метасимволы, группы, lookahead, lookbehind. Практические примеры для JavaScript, Python, PHP.
Разработка20 практических regex-паттернов: email, телефон, URL, IP, дата, пароль, HTML, логи. Готовые решения для валидации и парсинга.
РазработкаКак конвертировать CSV в JSON и обратно. Форматы данных, разделители, обработка кавычек, практические примеры на JavaScript и Python.
РазработкаПодробное руководство по онлайн-тестированию PHP: инструменты, ограничения, безопасность и практические сценарии использования. Сравнение с локальной разработкой.
Поделитесь с коллегами или изучите другие материалы блога
Регулярные выражения — компактный язык описания текстовых шаблонов. Метасимволы, квантификаторы, группы и lookaround часто забываются даже опытными разработчиками. В этой шпаргалке собраны все основные конструкции с краткими примерами. Тестировать паттерны удобно в Regex Tester на reChecker. Генерировать выражения по описанию помогает AI Regex Generator. Подробная теория — в полном руководстве по regex, практические примеры — в статье с 20 полезными паттернами.
| Символ | Значение | Пример |
|---|---|---|
. | Любой символ (кроме \n) | a.c → abc, a1c |
^ | Начало строки | ^Hello → Hello world |
$ | Конец строки | end$ → the end |
* | 0 или более повторений | go*gle → ggle, google |
+ | 1 или более повторений | go+gle → gogle, google |
? | 0 или 1 повторение | colou?r → color, colour |
| | Альтернация (ИЛИ) | cat|dog → cat или dog |
\ | Экранирование | \. → точка как символ |
() | Группировка и захват | (ab)+ → ababab |
[] | Символьный класс | [aeiou] → гласная |
{} | Квантификатор | \d{3} → ровно 3 цифры |
Чтобы использовать метасимвол как обычный символ, поставьте перед ним \:
\. \* \+ \? \\ \( \) \[ \] \{ \} \| \^ \$
Примеры:
\d+\.\d+ — десятичное число: 3.14
\*\*\* — три звёздочки
\[word\] — [word] как текст
| Конструкция | Описание | Пример |
|---|---|---|
[abc] | Один из символов | [aeiou] — гласная |
[a-z] | Диапазон (строчные) | [a-z]+ — слово |
[A-Z] | Диапазон (заглавные) | [A-Z][a-z]* — Имя |
[0-9] | Цифры | [0-9]{4} — год |
[^abc] | Отрицание | [^0-9] — не цифра |
[a-zA-Z0-9] | Объединение | буквы и цифры |
^ в начале — отрицание: [^0-9]- между символами — диапазон: [a-z]- в начале или конце — литерал: [-0-9] или [0-9-]] — экранировать: [\]\[]| Класс | Эквивалент | Описание |
|---|---|---|
\d | [0-9] | Цифра |
\D | [^0-9] | Не цифра |
\w | [a-zA-Z0-9_] | Словесный символ |
\W | [^a-zA-Z0-9_] | Не словесный |
\s | [\t\n\r\f\v ] | Пробельный символ |
\S | [^\t\n\r\f\v ] | Не пробельный |
Примечание: в JavaScript \w включает Unicode-буквы при флаге u. В других языках — только ASCII.
| Последовательность | Описание |
|---|---|
\n | Перевод строки |
\r | Возврат каретки |
\t | Табуляция |
\0 | Нулевой байт |
\xHH | Символ по hex (например, \x41 = A) |
\uHHHH | Unicode (например, \u0410 = А) |
| Квантификатор | Значение | Пример |
|---|---|---|
* | 0 или более | \d* — цифры или пусто |
+ | 1 или более | \d+ — одно или более цифр |
? | 0 или 1 | -?\d+ — число с опциональным минусом |
{n} | Ровно n | \d{4} — ровно 4 цифры |
{n,} | n или более | [a-z]{3,} — 3+ буквы |
{n,m} | От n до m | \d{2,4} — от 2 до 4 цифр |
| Тип | Синтаксис | Поведение |
|---|---|---|
| Жадный | *, +, ?, {n,m} | Захватывает максимум |
| Ленивый | *?, +?, ??, {n,m}? | Захватывает минимум |
| Притяжательный (PCRE) | *+, ++, ?+ | Жадный без отката |
Пример:
Текст: <b>жирный</b> и <b>ещё</b>
<b>.*</b> → одно совпадение: <b>жирный</b> и <b>ещё</b>
<b>.*?</b> → два совпадения: <b>жирный</b>, <b>ещё</b>
| Конструкция | Описание |
|---|---|
^ | Начало строки (или строки при флаге m) |
$ | Конец строки (или строки при флаге m) |
\A | Начало всего текста (не зависит от m) |
\Z | Конец всего текста |
\b | Граница слова (между \w и \W) |
\B | Не граница слова |
Примеры:
^\d+$ — строка целиком из цифр
\bword\b — слово «word» целиком
\Bcat\B — «cat» внутри слова (concatenate)
| Синтаксис | Описание |
|---|---|
(...) | Захватывающая группа |
(?:...) | Незахватывающая группа |
(?<name>...) | Именованная группа (JS, PCRE) |
(?P<name>...) | Именованная группа (Python) |
Примеры:
(\d{2})\.(\d{2})\.(\d{4}) — дата, группы 1, 2, 3
(?:https?):// — протокол без захвата
(?<year>\d{4})-(?<month>\d{2}) — именованные группы
| Синтаксис | Описание |
|---|---|
\1, \2, ... | Ссылка на группу по номеру |
\k<name> | Ссылка на именованную группу (JS, PCRE) |
(?P=name) | Ссылка на именованную группу (Python) |
Примеры:
(\w+)\s+\1 — повторяющееся слово
(['"]).*?\1 — строка в кавычках
<(\w+)>.*?</\1> — парный HTML-тег
| Синтаксис | Название | Описание |
|---|---|---|
(?=...) | Positive lookahead | Впереди должно быть ... |
(?!...) | Negative lookahead | Впереди не должно быть ... |
Примеры:
\d+(?=\s*руб) — число перед «руб»
\w+(?=\.) — слово перед точкой
^(?!.*admin) — строка без «admin»
| Синтаксис | Название | Описание |
|---|---|---|
(?<=...) | Positive lookbehind | Сзади должно быть ... |
(?<!...) | Negative lookbehind | Сзади не должно быть ... |
Примеры:
(?<=\$)\d+ — число после $
(?<=class=")[^"]+ — значение атрибута class
(?<!\d)\d{3} — 3 цифры не после цифры
(?<=<b>).*?(?=</b>) — содержимое между <b> и </b>
(?<!un)happy — happy, но не unhappy
| Флаг | JavaScript | Python | PHP | Описание |
|---|---|---|---|---|
i | i | re.I | i | Игнорировать регистр |
g | g | — | g | Глобальный поиск (все совпадения) |
m | m | re.M | m | Многострочный (^ и $ на каждую строку) |
s | s | re.S | s | Точка совпадает с \n |
u | u | re.U | u | Unicode (важно для \p{}) |
x | — | re.X | x | Игнорировать пробелы и комментарии |
// JavaScript
'Hello'.match(/hello/i); // ['Hello']
'1 2 3'.match(/\d/g); // ['1', '2', '3']
# Python
re.search(r'hello', 'Hello', re.I)
re.findall(r'\d', '1 2 3')
// PHP
preg_match('/hello/i', 'Hello');
preg_match_all('/\d/', '1 2 3', $m);
В режиме Unicode (u в JS, re.UNICODE в Python) доступны:
| Класс | Описание |
|---|---|
\p{L} | Буква (Letter) |
\p{N} | Число (Number) |
\p{P} | Пунктуация |
\p{S} | Символ |
\p{Z} | Пробел |
\p{Script=Cyrillic} | Кириллица |
\p{Script=Latin} | Латиница |
Отрицание: \P{L} — не буква.
Примеры:
\p{L}+ — последовательность букв (в т.ч. кириллица)
[\p{L}\p{N}\s]+ — слова с цифрами и пробелами
\p{Script=Cyrillic}+ — только кириллица
(?(condition)yes-pattern|no-pattern)
Пример: совпадение в кавычках или без:
(?(?=['"])(['"]).*?\1|[\w\s]+)
(?>pattern)
Группа без отката — как притяжательный квантификатор для всего паттерна.
\d{2} # день
\. # разделитель
\d{2} # месяц
От высшего к низшему:
*, +, ?, {}|Пример: a|bc интерпретируется как a или bc, а не ab или c.
const re = /\d+/; // Литерал
const re2 = new RegExp('\\d+'); // Строка — двойное экранирование
re.compile(r'\d+') # raw string — один \
re.compile('\\d+') # обычная строка — двойное \\
preg_match('/\d+/', $str); # В строках PHP \d → d, нужен \\
preg_match('/\\d+/', $str); # или один \ в паттерне
Рекомендации для избежания катастрофического backtracking:
(a+)+, (.*)*[^>]+ вместо .* внутри тегов\d{4} вместо \d+ для года| Конструкция | JS | Python | PHP | Java |
|---|---|---|---|---|
| Именованные группы | ES2018 | Да | Да | Да |
| Lookbehind | ES2018 | Да | Да | Да |
| Unicode \p | С флагом u | Да | Да | Да |
| Атомарные группы | Нет | Нет | Да | Да |
| Рекурсия | Нет | Нет | Да | Нет |
| Конструкция | Описание |
|---|---|
(?i) | Включить игнор регистра |
(?-i) | Выключить игнор регистра |
(?m) | Многострочный режим |
(?s) | Singleline (точка = любой символ) |
(?x) | Игнорировать пробелы |
В JavaScript встроенных inline-модификаторов нет. В Python — (?i) и аналоги.
\b зависит от определения «слова». В ASCII это [a-zA-Z0-9_]. В Unicode-режиме — расширенный набор. Осторожно с кириллицей: в старых движках \b может не работать для не-ASCII.
^ и $ — по умолчанию начало и конец всей строкиm — начало и конец каждой строки в многострочном тексте\A и \Z — всегда начало и конец текста (не зависят от m)'2026-03-07'.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3.$2.$1');
// '07.03.2026'
'John Doe'.replace(/(?<first>\w+)\s+(?<last>\w+)/, '$<last>, $<first>');
// 'Doe, John'
'hello world'.replace(/\b\w/g, m => m.toUpperCase());
// 'Hello World'
| Ошибка | Неправильно | Правильно |
|---|---|---|
| Точка как литерал | file.txt | file\.txt |
| Квадратные скобки | [0-9] для одной цифры | [0-9] или \d |
| Жадность | .* для «до первого» | .*? или [^X]* |
| Границы | \d+ для целого числа | \b\d+\b или ^\d+$ |
| Экранирование в строке | "\d" в JS | "\\d" или /\d/ |
Подробное руководство с теорией и примерами — полное руководство по regex. Готовые паттерны для типичных задач — 20 полезных регулярных выражений. Инструменты: Regex Tester и AI Regex Generator.