Регулярные выражения (Regular expressions, или просто regexp) — механизм, который позволяет осуществлять сложный поиск подстроки по заданному шаблону. Вот как раз о шаблонах мы и поговорим сегодня.
// Начало текста ^ // Конец текста $ // Любой единичный символ . // Количество совпадений 0 или 1. То же самое, что и {0,1}. ? // Любое количество совпадений или их отсутствие. То же самое, что и ({0,}). * // Как минимум одно повторение. То же самое, что и ({1,}). + // Совпадения от m до n включительно. {m,n} // Нижняя граница совпадений. {m,} // Верхняя граница совпадений. {,n}
Сложно? Ниже есть примеры, по ним будет все понятно. https://regex101.com/
// Цифра (0-9) \d // Не цифра (любой символ кроме символов 0-9) \D // Пустой символ (пробел и табуляция) \s // Непустой символ (все, кроме символов, определяемых метасимволом \s) \S // "Словесный" символ (все буквы, цифры и подчеркивание ('_')) \w // Все, кроме символов, определяемых метасимволом \w \W // Символ на границе слова (в начале или в конце) \b // Символ внутри слова \B
// Простая группа с захватом. ( ) /* Группа без захвата. Выражение: про(?:фессиональное|движение); Результат: Найдены оба слова. */ (?: ) /* Группа с положительной опережающей проверкой. Выражение: говор(?=ит); Результат: Найдено только слово "говорит" (еще нашло бы "говор"). */ (?= ) /* Группа с положительной опережающей проверкой. Выражение: говор(?!ит); Результат: Найдено "говорю", "говори", но не "говорит". */ (?! ) /* Группа с положительной ретроспективной проверкой. Выражение: (?<=об)говорить; Результат: Найдено «говорить» и «обговорить», но не «уговорить». */ (?<= ) /* Группа с отрицательной ретроспективной проверкой. Выражение: (?<!об)говорить; Результат: Найдено «говорить» и «уговорить», но не «обговорить». */ (?<! )
Грубо говоря все сводится к следущей форме:
^([разрешенные и запрещеные символы]{количество повторений})$
^([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z\.]{2,6})$
^
— начало строки;([a-z0-9_\.-]+)
— группа, состоящая из символов от a до z, цифр, нижнего подчеркивания, точки или тире, которые повторяются хотя бы один раз (+);@
— собачка, куда же без нее в email;([a-z0-9_\.-]+)
— разобрали уже чуть выше;.
— самая обычная точка. Между доменами второго и первого уровня;([a-z\.]{2,6})
— доменная зона. Символы от a до z или точка, которые повторяются от 2 до 6 раз;$
— конец строки.
Кроме того, после обработки можно будет обратиться к найденным группам $1
(username), $2
(домен второго уровня), $3
(доменная зона).
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w\.-]*)*\/?$
^
— начало строки;(https?:\/\/)?
— ищем http, следующий символ s, но он может и отсутствовать. Далее двоеточие, два заэкранированных слеша. Однако этого может и не быть;([\da-z\.-]+)
— цифры, латинский алфавит, точки и тире в каких-угодно количествах;.
— самая обычная точка. Между доменами второго и первого уровня;([a-z\.]{2,6})
— доменная зона. Символы от a до z или точка, которые повторяются от 2 до 6 раз;([\/\w\.-]*)*\/?
— слеш и любые алфавитные символы, включая точки и тире в каких угодно количествах, которые могут повторяться от 0 до бесконечности. Кроме того это может заканчиваться слешем, а может и нет, поэтому «?»;$
— конец строки.
Кроме того, после обработки можно будет установить адрес главной страницы ($1
, $2
и $3
), а в остальных переменных будет адрес страницы.
^\d{1,2}([-. /])\d{1,2}\1\d{2,4}$
^
— начало строки;d{1,2}
— любое число от одного до двух разрядов (день);([-. /])
— тире, точка, пробел или слеш между днем и месяцем;\d{1,2}
— любое число от одного до двух разрядов (месяц);\1
— вставляет выражение из первой группы захвата (из первых скобок, т.е. эквивалетно ([-. /])
);\d{2,4}
— любые числа года от двух до четырех разрядов, которые обозначают год;$
— конец строки.Проверить регулярное выражение можно в реальном времени на этом сайте https://regex101.com/