Совпадение путей URL A + или B +, но не AX + - PullRequest
0 голосов
/ 14 октября 2019

Я не очень хорошо разбираюсь в Regex, и мне нужно получить ответ на следующую проблему.

Я пытаюсь сопоставить / не сопоставить пути URL, которые мне нужны, чтобы сопоставить / appA или
/ appB

Но НЕ СООТВЕТСТВУЙТЕ / appA / download

Это используется в прокси-сервере Apache для определения URL-адресов, для которых устанавливаются правила аутентификации.

(^\/(appA|appB))

почти работает, но включает / appAиз / appA / Download

Я не могу использовать (^\/(appA|appB)$), поскольку это исключило бы все другие URL-адреса, начинающиеся с / appA или /appB.

. Я ищу регулярное выражение, соответствующее /appA или / appB в

/appA
/appA/something
/appB
/appB/something

Не соответствует / appA, когда / download следует.

/appA/download
/appA/downloadsomething

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Я считаю, что вам нужен негативный взгляд в будущее. В регулярном выражении: (?!<pattern>)

Ваше регулярное выражение должно быть в состоянии сопоставить полную строку, используя этот метод (используя ^ и $), например так:

(^\/(appA|appB))(?!\/download).*$

Отрицательный видвперед: (?!\/download) исключит совпадения, где "/download" следует сразу после /appA или /appB

Примечание: .* будет соответствовать остальной части строки (например: /something в/appA/something), но не является обязательным, поэтому /appA по-прежнему является действительным соответствием.

Вот RegexR, чтобы показать примеры: RegexR - (^ / (appA | appB)) (?! / Download). * $

0 голосов
/ 14 октября 2019

Попробуйте следующий шаблон:

^\/(app[AB])(?!\/download).*

Используется отрицательный прогноз для проверки по download.

Вы можете увидеть его demo'd на https://regexr.com/4mqah.

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