Регулярное выражение для принятия пути URL с условием - PullRequest
0 голосов
/ 09 мая 2019

У меня есть регулярное выражение:

listing/(.+?)/([^\/.]+)/?(reviews/?(.+?)?/?)?/?$

принимает следующие URL:

listing/united-states/postname1/

listing/united-states/california/postname2/

listing/united-states/california/chino/postname3/

listing/united-states/california/chino/postname4/reviews/testreview/

Что я могу сделать, чтобы он не принимал:

listing/united-states/california/chino/postname1/reviews/

listing/united-states/california/chino/postname2/add-review/

1 Ответ

1 голос
/ 09 мая 2019

Вы можете использовать отрицательный взгляд вперед, чтобы отклонить строки, которые заканчиваются на /reviews/ или add-review, используя это регулярное выражение,

(?!.*/(add-)?reviews?/$)listing/(.+?)/([^\/.]+)/?(reviews/?(.+?)?/?)?/?$
^^^^^^^^^^^^^^^^^^^^^^^^ This negative look ahead will reject strings
                         that end with review or reviews or add-review or add-reviews

Regex Demo

Однако, если вы строго хотите отклонить строки, которые заканчиваются только на add-review или reviews, вам придется использовать это регулярное выражение,

(?!.*/(?:add-review|reviews)/$)listing/(.+?)/([^\/.]+)/?(reviews/?(.+?)?/?)?/?$

Regex Demo строго отбрасывает указанные вами строки

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