В этом уроке мы изучим еще одну технику поиска — поиск по условию. Это одна из самых сложных конструкций, которая существует в регулярных выражениях и не поддерживается в JavaScript, и многих других языках программирования.
В некоторых языках нужно учитывать особенности его реализации: Python поддерживает условный поиск с использованием группировки с обратной связью или именованных групп.
Это конструкция напоминает тернарный оператор из языков программирования и выглядит следующим образом: (?ifthen|else)
.
Рассмотрим ее работу на таком примере:
/(?(?<=a)m|p)
/
mam
,p
ap
Мы видим внешние скобки с ?
, а внутри — два отдельных выражения:
(?<=a)
. Оно проверяет, соответствует ли символ слева a
m
и p
в зависимости от того, сработало условие или нетМожно описать эту конструкцию так: «Найти все m
перед которыми идет a
или p
, перед которыми a
нет».
Давайте разберем поиск в нашей строке посимвольно:
m
и стоит ли перед ним a
. Условие не выполнилось, поэтому пробуем извлечь p
, что также не является текущим символомa
не подходит под условия. Пропускаем подстроку ma
и проверяем m,pap
m
соответствует m
, ранее была a
— мы нашли первое сопоставление,
не подходит под условия. Пропускаем подстроку mam,
и проверяем pap
p
не соответствует am
, но соответствует p
— мы нашли второе сопоставлениеa
снова запускает проверку следующего символа на соответствие m
p
проваливает проверку на соответствие m
Вот так в результате условного поиска мы нашли два совпадения в строке.
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт