Введение
Вы изучили основы сопоставления с шаблоном в регулярных выражениях, но предыдущие примеры имели один серьёзный недостаток. Рассмотрим задачу написания регулярного выражения для обнаружения адресов электронной почты. Основной формат: 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.
Отзывы