От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных теме регулярных выражений и в этой статье мы познакомимся с одним из наиболее популярных метасимволов в регулярных выражениях — это символ точка. Начнем?
Начнем сразу с того, что же означает символ точки в регулярных выражениях. В шаблоне регулярного выражения точка совпадает с любым символом, кроме перевода строки (по умолчанию). Если мы хотим, чтобы точка совпадала также и с символом перевода строки, в PHP мы можем использовать модификатор шаблона s.
Давайте сразу перейдем к примерам. Напишем несколько произвольных строк текста и используем точку в шаблоне.
Как видим, точка действительно совпадает с любым символом: буквы, цифры, пробел, точка, запятая и т.д. При этом точка совпадает с одним символом, но благодаря модификатору g поиск не ограничивается первым совпадением и продолжается дальше. В итоге найдено 21 совпадение (количество совпадений можно увидеть в правом верхнем углу сервиса regexr.com).
Если мы добавим квантификатор + после точки, то тем самым зададим поиск совпадающих символов от одного до бесконечности.
Теперь найдено 3 совпадения (по количеству строк). Поскольку точка не совпадает с символом перевода строки, шаблон найдет совпадение до конца строки.
А что, если мы хотим найти именно точку? Как быть в таком случае? Здесь есть два варианта. Первый — использование символа экранирования, которым является обратный слеш (\). Указав слеш перед метасимволом, мы тем самым экранируем метасимвол и он будет трактоваться, как обычный символ, т.е. в данном случае, как просто точка.
Теперь найдена только точка. Другой вариант — поместить точку в символьный класс, где она рассматривается как обычный символ:
Ну и в качестве практики давайте напишем простейший шаблон регулярного выражения, который будет валидировать адреса email. Сразу оговорюсь, что этот шаблон не будет иметь учебный характер и не предназначен для валидации всех возможных вариантов email, но для большинства адресов он вполне сгодится.
Все работает. Обратите внимание, точка перед последней частью доменного имени экранирована. Это сделано для того, чтобы она воспринималась именно как точка. Если же мы уберем экранирующий слеш, тогда точка будет совпадать с любым символом и наш шаблон пропустит некорректный email:
На этом мы будем завершать сегодняшнюю статью. Больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!