Как исключить слова из совпадения в регулярном выражении? - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь исключить определенные URL-адреса из совпадения, содержащего /com/de/cms/ например:

сопоставьте это:

www.example.com/catname/all-from-category/?pageNumber=1

но не это:

example.com / com / de / cms / catname / all-from-category /? pageNumber = 3

Regex:

^[^com\/de\/cms\/]+\/all-from-category\/\?pageNumber=\d(&hitsPerPage=\d)?

https://regex101.com/r/Mqpspq/1

Как мне исключить URL-адреса с com/de/cms/ при сопоставлении другого URL-адреса?

1 Ответ

1 голос
/ 28 мая 2020

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

  1. Первый ^ соответствует start начала или началу строки, если многострочный режим включен.

  2. Часть [^com\/de\/cms] означает соответствие любому символу кроме c, или o, или m, или / , или, et c. Но вы намеревались сопоставить любую подстроку , кроме com/de/cms в целом. То, что вы хотите, можно сделать с помощью отрицательного просмотра назад , например: (?<!com\/de\/cms\/)

  3. Вам не хватает части catname.

Рабочее регулярное выражение будет:

(?<!com\/de\/cms)\/catname\/all-from-category\/\?pageNumber=\d

Предыдущее регулярное выражение просто говорит следующее:

Пожалуйста, сравните /catname/all-from-category/?pageNumber=SOME_DIGIT, то есть не , которому предшествует com/de/cms.

Regexr .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...