Регулярные выражения — все проще, чем кажется

Регулярные выражения (Regular expressions, или просто regexp) — механизм, который позволяет осуществлять сложный поиск  подстроки по заданному шаблону. Вот как раз о шаблонах мы и поговорим сегодня.


Специальные символы

// Начало текста
^

// Конец текста
$

// Любой единичный символ
.

// Количество совпадений 0 или 1. То же самое, что и {0,1}.
?

// Любое количество совпадений или их отсутствие. То же самое, что и ({0,}).
*

// Как минимум одно повторение. То же самое, что и ({1,}).
+

// Совпадения от m до n включительно.
{m,n}

// Нижняя граница совпадений.
{m,}

// Верхняя граница совпадений.
{,n}

Сложно? Ниже есть примеры, по ним будет все понятно.

Метасимволы

// Цифра (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})$

Разбор


  • ^

    — начало строки;

  • ([a-z0-9_.-]+)

    — группа, состоящая из символов от a до z, цифр, нижнего подчеркивания, точки или тире, которые повторяются хотя бы один раз (+);

  • @

    — собачка, куда же без нее в email;

  • ([a-z0-9_.-]+)

    — разобрали уже чуть выше;

  • .

    — самая обычная точка. Между доменами второго и первого уровня;

  • ([a-z.]{2,6})

    — доменная зона. Символы от a до z или точка, которые повторяются от 2 до 6 раз;

  • $

    — конец строки.

Кроме того, после обработки можно будет обратиться к найденным группам

$1

(username),

$2

(домен второго уровня),

$3

(доменная зона).

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

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

^(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}1d{2,4}$

Разбор


  • ^

    — начало строки;

  • d{1,2}

    — любое число от одного до двух разрядов (день);

  • ([-. /])

    — тире, точка, пробел или слеш между днем и месяцем;

  • d{1,2}

    — любое число от одного до двух разрядов (месяц);

  • 1

    — вставляет выражение из первой группы захвата (из первых скобок, т.е. эквивалетно

    ([-. /])

    );

  • d{2,4}

    — любые числа года от двух до четырех разрядов, которые обозначают год;

  • $

    — конец строки.


Пишите комментарии, задавайте вопросы, на основе этого статья будет дополняется

.


admin

Recent Posts

После включения диагностического запуска не удается войти в Windows — как исправить?

Некоторые пользователи, экспериментируя с конфигурацией системы в окне msconfig могут столкнуться с ситуацией, когда после…

2 недели ago

WinScript — очистка и настройка Windows 11 и 10

На сайте не раз публиковались обзоры программ, предназначенных для очистки или настройки последних версий Windows.…

2 недели ago

Предварительный просмотр накопительного обновления не устанавливается — решение

При установке некоторых обновлений Windows 11, имеющих в названии «Предварительный просмотр накопительного обновления», многие пользователи…

2 недели ago

FixExec — восстановление ассоциаций .exe, .bat и .com файлов

Некоторые пользователи Windows 11, 10 и предыдущих версий системы могут столкнуться с ситуацией, когда исполняемые…

2 недели ago

Ошибка 0x800705b4 при обновлении Windows 11 и 10 — как исправить?

При установке обновлений Windows 11/10 некоторые пользователи могут столкнуться с ошибкой с кодом 0x800705b4 и…

2 недели ago

Обслуживание вашей версии Windows 11 окончено — что делать?

Пользователи Windows 11 могут столкнуться с сообщением «Обслуживание вашей версии Windows окончено» (Your version of…

2 недели ago