🧩
← Назад к руководствам

Регулярные выражения для начинающих: как писать регулярные выражения

· Теги: regex-beginners, regular-expression-guide, regex-tutorial, regex-patterns, learn-regex

Регулярные выражения для начинающих

Регулярные выражения — regex — это шаблоны, описывающие текст. С помощью regex можно искать строки, проверять ввод, извлекать данные и выполнять сложный поиск с заменой, используя одно компактное выражение. Как только вы поймёте основы, regex станет одним из самых мощных инструментов в вашем арсенале программиста.

Что такое регулярное выражение?

Regex — это последовательность символов, определяющая шаблон поиска. Шаблон \d{3}-\d{2}-\d{4} соответствует номеру социального страхования США: три цифры, дефис, две цифры, дефис, четыре цифры.

Движки регулярных выражений существуют практически во всех языках программирования — JavaScript, Python, Java, Ruby, Go — все имеют встроенную поддержку.

Литеральные символы

Большинство символов соответствуют сами себе. Шаблон cat соответствует буквальной строке «cat» везде, где она встречается.

Pattern: cat
Matches: "cat" в "The cat sat on the mat."
Matches: "cat" в "catalog"

Литеральное сопоставление просто, но ограничено. Настоящая сила заключается в метасимволах.

Метасимволы

Эти символы имеют специальное значение и должны быть экранированы с помощью \, чтобы сопоставляться буквально:

. ^ $ * + ? { } [ ] \ | ( )

Классы символов

Классы символов сопоставляют один символ из набора.

Квадратные скобки

| Шаблон | Соответствует | |---------|---------| | [aeiou] | Любая гласная | | [0-9] | Любая цифра | | [a-zA-Z] | Любая буква | | [^0-9] | Любой символ, который НЕ является цифрой |

Предопределённые классы

| Сокращение | Описание | |-----------|-------------| | \d | Любая цифра (аналог [0-9]) | | \w | Буква, цифра или подчёркивание | | \s | Пробел, табуляция, перевод строки | | \D | Любой не-цифровой символ | | \W | Любой не-словесный символ | | \S | Любой не-пробельный символ | | . | Любой символ, кроме перевода строки |

Квантификаторы

Квантификаторы управляют тем, сколько раз должен появиться предшествующий элемент.

| Квантификатор | Значение | Пример | Соответствует | |------------|---------|---------|---------| | * | Ноль или более | a* | "", "a", "aa" | | + | Один или более | a+ | "a", "aa", "aaa" | | ? | Ноль или один | colou?r | "color", "colour" | | {3} | Ровно N | \d{3} | "123" | | {2,4} | От N до M | \d{2,4} | "12", "123", "1234" |

Примеры

\d+     → "42" в "Answer is 42"
https?://  → "http://" и "https://"

Якоря

Якоря сопоставляют позиции, а не символы.

| Якорь | Значение | |--------|---------| | ^ | Начало строки | | $ | Конец строки | | \b | Граница слова | | \B | Не-граница слова |

^hello   → соответствует "hello" только в начале
end$     → соответствует "end" только в конце
\bword\b → соответствует "word" как целому слову, а не внутри "sword"

Группы и альтернация

Захватывающие группы ( ) извлекают совпавшие части:

(\d{3})-(\d{4}) → "555-1234", захватывает "555" в группу 1, "1234" в группу 2

Незахватывающие группы (?: ) группируют без извлечения:

(?:https?|ftp):// → "http://", "https://", "ftp://"

Альтернация | действует как ИЛИ:

cat|dog|bird → соответствует "cat", "dog" или "bird"

Практические примеры регулярных выражений

| Назначение | Шаблон | |----------|---------| | Телефон США | \d{3}-\d{3}-\d{4} | | Email (простой) | \S+@\S+\.\S+ | | IP-адрес | \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} | | Хештег | #[a-zA-Z]\w* | | Время (ЧЧ:ММ) | [01]\d|2[0-3]:[0-5]\d |

Как протестировать шаблон регулярного выражения

Всегда тестируйте шаблоны интерактивно:

  1. Введите шаблон регулярного выражения.
  2. Введите тестовую строку.
  3. Посмотрите, какие части совпадают в реальном времени.
  4. Скорректируйте и повторите.

Используйте инструмент тестера регулярных выражений для экспериментов с шаблонами. Он выделяет совпадения, показывает группы захвата и помогает понять, что именно делает каждая часть вашего выражения.

Регулярные выражения для начинающих: как писать регулярные выражения - CoolTool