Кладовочка

О разном, чтобы было под рукой онлайн

Шпаргалка Regex: регулярные выражения

Якоря и границы

Символ Значение Пример
^ Начало строки ^Hello — начинается с Hello
$ Конец строки world$ — заканчивается на world
\b Граница слова \bcat\b — слово cat (не catch)
\B Не граница слова \Bcat\B — cat внутри слова

Символьные классы

Класс Значение Эквивалент
. Любой символ (кроме \n)
\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]

Символьные множества

[abc]        # a, b или c
[a-z]        # любая строчная буква
[A-Z]        # любая заглавная
[0-9]        # любая цифра
[a-zA-Z]     # любая буква
[^abc]       # НЕ a, b, c
[a-z&&[^bc]] # a-z, кроме b и c (Java)

Квантификаторы (повторения)

Квантификатор Значение
* 0 или больше (жадный)
+ 1 или больше (жадный)
? 0 или 1
{n} Ровно n раз
{n,} n или больше
{n,m} От n до m
*? 0 или больше (ленивый)
+? 1 или больше (ленивый)

Жадный vs ленивый:

"<p>Hello</p>"   →  <.+>   = <p>Hello</p>   (жадный, максимум)
"<p>Hello</p>"   →  <.+?>  = <p>            (ленивый, минимум)

Группы и захват

(foo|bar)        # группа: foo или bar
(?:foo|bar)      # не-захватывающая группа (для | без захвата)
\1               # обратная ссылка на группу 1
(?<name>pattern) # именованная группа
\k<name>         # ссылка на именованную группу

Lookahead и Lookbehind (просмотр вперёд/назад)

Синтаксис Значение
X(?=Y) X, за которым следует Y (positive lookahead)
X(?!Y) X, за которым НЕ следует Y (negative lookahead)
(?<=Y)X X, перед которым Y (positive lookbehind)
(?<!Y)X X, перед которым НЕ Y (negative lookbehind)

Примеры:

\d+(?=\.)          # число, за которым точка (не захватывая точку)
(?<=\$)\d+         # число после знака доллара
\b(?!un)\w+        # слово, не начинающееся с "un"

Часто используемые шаблоны

# Email (базовый)
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

# URL
^https?://[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!$&'()*+,;=.]+$

# IPv4
^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$

# Телефон (российский)
^(\+7|8)?[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}$

# Дата (DD.MM.YYYY)
^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.\d{4}$

# Пароль (минимум 8 символов, буква + цифра)
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$

# HTML-тег
<\/?[a-z][\s\S]*?>

# CSS-цвет hex
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

# ИНН (российский, 10 или 12 цифр)
^\d{10}(\d{2})?$

# UUID
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

# Пустая строка
^$

# Комментарий (// до конца строки)
\/\/.*$

# Строка в кавычках
"([^"\\]|\\.)*"
'(?:[^'\\]|\\.)*'

# Несколько пробелов → один
\s{2,}

Флаги

Флаг Значение
i Игнорировать регистр
g Глобальный поиск (все совпадения, не только первое)
m Многострочный (^ и $ — начало/конец строки, а не текста)
s dotAll — . включает \n
u Unicode
x Игнорировать пробелы и комментарии в шаблоне

Примеры использования в коде

JavaScript

// Проверка на совпадение
/^\d+$/.test("12345")              // true

// Поиск
"hello 123 world".match(/\d+/)     // ["123"]
"hello 123 world 456".match(/\d+/g) // ["123", "456"]

// Замена
"hello world".replace(/\w+/g, m => m.toUpperCase())  // "HELLO WORLD"

// Разбиение
"a, b, c".split(/,\s*/)            // ["a", "b", "c"]

Python

import re

# Поиск
re.search(r'\d+', 'hello 123')    # Match object
re.findall(r'\d+', 'a1 b2 c3')    # ['1', '2', '3']

# Замена
re.sub(r'\s+', ' ', 'a   b')      # 'a b'

# Компиляция (для многократного использования)
pattern = re.compile(r'\d+', re.IGNORECASE)
pattern.findall('AB12 cd34')       # ['12', '34']

grep

grep -E "[0-9]{3}" file.txt       # 3 цифры подряд
grep -P "\d{3}" file.txt          # Perl-совместимый regex
grep -oP "\d+" file.txt           # вывести только совпадения

sed

sed 's/[0-9]\+/NUM/g' file.txt    # заменить все числа на NUM
sed -E 's/\b(\w+)\s+\1\b/\1/g' file.txt  # удалить дубликаты слов

Escape-последовательности

Символ Значение
\n Перевод строки
\r Возврат каретки
\t Табуляция
\x1F Символ по hex-коду
\u00A9 Unicode-символ ©
\\ Обратный слеш
\. Точка (буквально)

Отладка и тестирование

Инструменты для тестирования регулярок:

  • regex101.com — с объяснением каждого символа
  • regexr.com — интерактивный редактор
  • grep -P / rg — проверка на файлах из командной строки

Другие шпаргалки: AWK, Linux, curl