От автора: приветствую вас, друзья. В этой статье мы поговорим о квантификаторах в регулярных выражениях и рассмотрим примеры их использования. Приступим?
Начнем статью с определения того, что такое квантификаторы в регулярных выражениях и какие квантификаторы нам доступны. Итак квантификаторы — это метасимволы, позволяющие задать количество повторений символа или группы символов в строке.
Доступны нам следующие квантификаторы:
* — любое кол-во вхождений предшествующего символа
+ — одно или более вхождений предшествующего символа
? — указывает на необязательность предшествующего символа
{n} — точное кол-во вхождений предшествующего символа
{n,} — минимальное кол-во вхождений предшествующего символа
{n,m} — возможно кол-во вхождений предшествующего символа от n до m
Собственно это и все квантификаторы, которые мы можем использовать в регулярных выражениях. Используя их, мы можем очень гибко валидировать входящие данные.
И сразу простой пример. Нам необходимо составить регулярное выражение, которое найдет ссылку в строке.
1 |
$pattern = '# <a href="[^"]+">.+</a>#'; |
Как видим, мы использовали дважды квантификатор +, который подразумевает наличие как минимум одного символа, указанного перед квантификатором. Данная часть шаблона — [^»]+ — совпадает с любыми символами, кроме кавычек. Ну а эта часть — .+ — совпадет с любым символом, кроме перевода строки. Квантификатор + позволяет повторять кол-во таких символов любое число раз, но не менее одного, т.е. должен быть как минимум один символ.
А что будет, если в строке будет пустая ссылка?
В этом случае шаблон не сработал, поскольку в атрибуте href должен находиться хотя бы 1 символ, этого требует квантификатор +. Как же решить задачу? Просто. Достаточно вместо метасимвола + использовать квантификатор *, который предполагает повторение символа от нуля до бесконечного числа раз. Т.е. он делает символ необязательным и допускает его повторение любое кол-во раз.
А вот теперь все работает. По сути квантификатор + это аналог такой записи — {1,}. А квантификатор * такой — {0,}.
На этом у меня сегодня все. Больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!