Выражение регулярных выражений, которое соответствует URL-адресам, если оно содержит один шаблон, но не другой

#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
  

Надеюсь, это поможет!