Перейти к основному содержимому
FreeOnlineTools Go
Русский
Объяснение

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

Автор: FreeOnlineTools Team · Обновлено 2026-09-02

Быстрый ответ

Regular expression — паттерн, описывающий множество строк. Использует literal characters и metacharacters (*, +, ?, ., ^, $, [], (), {}, |, \) со специальными значениями. Regex для валидации, поиска, извлечения и замены. Используйте наш бесплатный Regex Tester.

Введение

Regular expression (regex или regexp) — последовательность символов, определяющая search-паттерн. Паттерн используется алгоритмами string-searching для поиска, match или replace текста. Regex возник в теории формальных языков в 1950-х (Stephen Kleene) и был принят в Unix-инструменты (grep, sed, awk) в 1970-х. Сегодня regex встроен практически в каждый язык программирования и редактор.

Шаг за шагом

  1. Понимать литералы и метасимволы

    Буквальные символы (a, b, 1, @) соответствуют сами себе. Метасимволы имеют особое значение: . соответствует любому символу, * означает ноль или более, + означает один или несколько, ? означает ноль или единицу, ^ соответствует началу, $ соответствует концу.

  2. Изучите классы персонажей

    Квадратные скобки [] определяют класс символов: [aeiou] соответствует любой гласной, [0-9] соответствует любой цифре, [^0-9] соответствует любой нецифре. Классы сокращений: \d (цифра), \w (словный символ), \s (пробел) и их отрицания в верхнем регистре.

  3. Используйте квантификаторы

    Кванторы определяют, сколько раз повторяется шаблон: * (0+), + (1+), ? (0 или 1), {n} (ровно n), {n,} (n+), {n,m} (от n до m). Жадный по умолчанию; добавлять ? для ленивого сопоставления (например, *?).

  4. Группа и якорь

    Круглые скобки () создают группы захвата. Чередование | соответствует любой стороне (кошка|собака). Якоря ^ и $ соответствуют началу и концу строки. Используйте их, чтобы создавать сложные узоры из более простых.

Примеры

Сопоставьте шаблон, подобный электронному письму

Вход: Pattern: [a-z]+@[a-z]+\.[a-z]+

Выход: Соответствует: alice@example.com, bob@test.org.

Сопоставить формат номера телефона

Вход: Pattern: \d{3}-\d{3}-\d{4}

Выход: Matches: 555-123-4567

Извлечение пар ключ-значение

Вход: Pattern: (\w+)=(\w+)

Выход: Matches 'key=value' with group 1 as key, group 2 as value

Распространенные проблемы

  • Жадное сопоставление требует чрезмерного потребления —.* соответствует максимально возможному количеству совпадений. Использовать .*? для ленивого сопоставления, чтобы найти самое короткое совпадение.
  • Если забыть экранировать специальные символы —., *, +, ? и т. д., они являются специальными. Используйте \ для их буквального соответствия (например, \. соответствует буквальной точке).
  • Катастрофический возврат — шаблоны с вложенными кванторами (например, (a+)+) могут занимать экспоненциальное время для определенных входных данных, вызывая атаки ReDoS.
  • Чрезмерное совпадение — без привязок (^ и $) шаблон совпадает где угодно. Используйте ^...$, чтобы сопоставить всю строку.

Советы

  • Начните с простого и постепенно усложняйте — отладка сложного регулярного выражения одновременно очень сложна.
  • Используйте тестер регулярных выражений, чтобы экспериментировать с шаблонами в образце текста — просматривайте совпадения, выделенные в режиме реального времени.
  • Комментируйте сложные регулярные выражения, используя расширенный режим (флаг /x в некоторых движках) или разбивайте их на именованные части.
  • Используйте наш тестер регулярных выражений для мгновенного тестирования шаблонов в вашем браузере — без регистрации, полностью конфиденциально.

Сопутствующие инструменты

Связанные руководства

Ссылки