Содержание

Регулярные выражения

Регулярные выражения (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

Группы и просмотр

// Простая группа с захватом.
( )

/* Группа без захвата.
Выражение: про(?:фессиональное|движение);
Результат: Найдены оба слова.
*/
(?: )

/* Группа с положительной опережающей проверкой.
Выражение: говор(?=ит);
Результат: Найдено только слово "говорит" (еще нашло бы "говор").
*/
(?= )

/* Группа с положительной опережающей проверкой.
Выражение: говор(?!ит);
Результат: Найдено "говорю", "говори", но не "говорит".
*/
(?! )

/* Группа с положительной ретроспективной проверкой.
Выражение: (?<=об)говорить;
Результат: Найдено «говорить» и «обговорить», но не «уговорить».
*/
(?<= )

/* Группа с отрицательной ретроспективной проверкой.
Выражение: (?<!об)говорить;
Результат: Найдено «говорить» и «уговорить», но не «обговорить».
*/
(?<! )

Грубо говоря все сводится к следущей форме:

^([разрешенные и запрещеные символы]{количество повторений})$

Готовые шаблоны

Поиск email в строке

Регулярное выражение для поиска email

^([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z\.]{2,6})$

Разбор

Кроме того, после обработки можно будет обратиться к найденным группам $1 (username), $2 (домен второго уровня), $3 (доменная зона).

Поиск url в строке

Регулярное выражения для поиска url в строке

^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w\.-]*)*\/?$

Разбор

Кроме того, после обработки можно будет установить адрес главной страницы ($1, $2 и $3), а в остальных переменных будет адрес страницы.

Поиск даты в строке

Регулярное выражение для поиска даты в строке

^\d{1,2}([-. /])\d{1,2}\1\d{2,4}$

Разбор

Проверить регулярное выражение можно в реальном времени на этом сайте https://regex101.com/