#regex #web-crawler
#регулярное выражение #веб-искатель
Вопрос:
Мне нужно создать шаблон регулярных выражений, который будет соответствовать всем URL-адресам, которые содержат String1, но не String2. Проблема в том, что URL-адрес может содержать как String1, так и String2. Например, при обходе сайта электронной коммерции я хочу собирать страницы каталога без получения URL-адресов продуктов.
Пример URL-адреса каталога: http://www.domain.com/catalog/name Строка 1: каталог
Пример URL-адреса продукта: http://www.domain.com/catalog/name/product/id => Строка 2: продукт
Используя приведенные выше примеры URL-адресов, String1 — это «каталог», а String2 — «продукт». Мой текущий шаблон для получения URL-адресов каталога /catalog(?:/[w-/]*)?$
Как мне расширить этот шаблон, чтобы пропустить все URL-адреса с помощью String2 ?
Комментарии:
1. проще всего использовать два выражения. получите ваши URL-адреса в первом. во втором посмотрите, является ли «product» подстрокой URL-адреса, и если да, не используйте его.
2. Спасибо @aleph_null, но я смог заставить его работать, используя
/catalog(?:/[w-]*)?(?!.*/product/)
совпадение с «/catalog», а затем, при необходимости, с любой частью URL-адреса, которая удовлетворяет буквенно-цифровому символу или дефису, за исключением случаев, когда за ним следует «/product/».
Ответ №1:
Я думаю, вы ищете негативный взгляд в будущее
Например, это регулярное выражение:
catalog/name/(?!product)
Совпадения (пример):
http://www.domain.com/catalog/name/produc/id
Однако оно не соответствует (пример):
http://www.domain.com/catalog/name/product/id
Надеюсь, это поможет!