Найти тему
Kenu Len

Регулярные выражения. Часть 2: Проверки

В первой статье мы прошлись по базовым вещам из которых составляются регулярные выражения и теперь можем перейти к более сложным и интересным вещам.

Опережающая проверка

X(?=Y) - грубо говоря, найди X за которым стоит Y.

X и Y могут быть как чем-то конкретным, так и другими регулярными выражениями. Рассмотрим пример! У нас есть список почтовых адресов:

  • qwe@mail.ru
  • qwer@yandex.ru
  • qwert@gmail.com
  • asd@mail.ru
  • asdf@yandex.ru
  • asdfg@gmail.com

Хотим получить часть строки до @, и окончанием .ru

.+ - часть которая нам нужна, остальное это опережающая проверка, которая проверяет, что мы работаем с почтовым адресом (наличие @) и он оканчивается на .ru

Ретроспективная проверка

В общем-то, это то же самое, но в другую сторону: (?<=Y)X - находит X перед которым стоит Y.

-2

К сожалению, параметры поиска должны быть точными - вы должны знать длину строки перед X. Ретреспективная проверка не поддерживает выражения без фиксированной длины:

-3

Отрицание

Для вышеописанных проверок существуют "отрицающие" варианты:

  • X(?!Y) - негативная опережающая проверка - ищет X за которым нет Y;
  • (?<!Y)X - негативная ретроспективная проверка - ищет X, перед которым нет Y.

Заключение

Безусловно, данные проверки можно заменить базовыми конструкциями, однако они бывают удобны при решении нетривиальных задач, где требуется поиск в определенных последовательностях (например разбор исходных текстов ПО, кода страниц и др.).

Полный плейлист