Belov Solutions

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

Введение

Вы изучили основы сопоставления с шаблоном в регулярных выражениях, но предыдущие примеры имели один серьёзный недостаток. Рассмотрим задачу написания регулярного выражения для обнаружения адресов электронной почты. Основной формат: text@text.text. Используя метасимволы, можно составить выражение вроде \w@\w\.\w, где \w соответствует буквенно-цифровым символам и подчёркиванию, а точка экранируется. Однако такое выражение бесполезно, так как оно совпадает только с одним символом, например, a@b.c, что синтаксически допустимо, но недействительно.

Проблема с одним символом

Метасимвол \w ограничивает совпадение одним символом, тогда как адреса вроде t@mail.ru или test@mail.ru требуют гибкости. Количество символов перед @ варьируется, поэтому нужно обеспечить совпадение с несколькими символами.

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

Для этого используется знак +, который обозначает совпадение с одним или несколькими экземплярами символа или набора. Например:

  • a+ — одна или более буквы «a».
  • [0-9]+ — одна или более цифр.

Совет: знак + должен стоять за пределами набора, например, [0-9]+ верно, а [0-9+] неверно, так как интерпретируется как набор от 0 до 9 или знак «+».

Пример с email

Применяя +, можно улучшить регулярное выражение для адресов электронной почты:

Текст:
Отправляйте сообщения на chat@belov.solutions касательно веб-разработки. По вопросам поддержки - support@belov.solutions.

Регулярное выражение:
\w+@\w+\.\w+

Результат:
Отправляйте сообщения на chat@belov.solutions касательно веб-разработки. По вопросам поддержки - support@belov.solutions.

Анализ: выражение \w+@\w+\.\w+ корректно находит оба адреса, совпадая с одним или более символами перед и после @.

Расширенный пример

Применяя то же выражение к тексту с доменами вроде chat.support@belov.solutions:

Текст:
Отправляйте сообщения на chat.support@belov.solutions касательно веб-разработки. По вопросам поддержки - support.chat@belov.solutions.

Регулярное выражение:
\w+@\w+\.\w+

Результат:
Отправляйте сообщения на chat.support@belov.solutions касательно веб-разработки. По вопросам поддержки - support.chat@belov.solutions.

Анализ: выражение не полностью совпадает с chat.support@belov.solutions, так как \w не включает точку. Исправление: [\w.]+@[\w.]+\.\w+.

Исправленное выражение

Текст:
Отправляйте сообщения на chat.support@belov.solutions касательно веб-разработки. По вопросам поддержки - support.chat@roman.belov.solutions.

Регулярное выражение:
[\w.]+@[\w.]+\.\w+

Результат:
Отправляйте сообщения на chat.support@belov.solutions касательно веб-разработки. По вопросам поддержки - support.chat@roman.belov.solutions.

Анализ: [\w.]+ теперь включает точки, корректно обрабатывая вложенные домены.

Примечания

В конце используется \w+, а не [\w.]+, чтобы избежать лишних совпадений. Знак . в наборе [\w.] не требует экранирования, так как интерпретируется буквально.

Заключение

Знак + позволяет гибко управлять количеством совпадений в регулярных выражениях, что критично для обработки сложных форматов, таких как email.

Отзывы

Оставить отзыв

Ваша эл. почта не будет опубликована