Сопоставить несколько URL через regex

Всем привет. Есть два path:

/api/test/{path param}
/api/test/{path param}/full

Мне нужно сопоставить URL на который сервер прислал запрос с этими двумя путями.

Регулярки для этого я использовал следующие:

\/test\/.*
\/test\/.*\/full

Но сразу возникла проблема. Второй путь маппится на обе регулярки, т.к. первой регулярке без разницы, что будет после /test/. Соответственно возникает запрос на то, чтобы как-то проверять второй случай, отсекая первую регулярку.

Из идей, это добавить в регулярку заканчивающуюся на ".*" проверку на то, что во всех этих символах не будет содержаться '/'.

\/test\/.* но не '/' в конечной группе

Но я не совсем понимаю, как это можно сделать. Пробовал такую регулярку:

\/test\/[^\/]+

Но она все равно матчит первый кейс по /test/1/full. И только если сделать такой путь /test//full, то матча не будет.


Ответы (1 шт):

Автор решения: Aleksey Vaganov

Первый урл будет матчить регулярное выражение:

^/api/test/.+(?<!/full)$

Подробности о Negative Lookbehind.

Для второго урла:

^/api/test/.+/full$
→ Ссылка