Regex для проверки параметров в URI - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь проверить URI системы с помощью регулярного выражения для определения параметров в середине URI API REST, однако у меня возникают проблемы с проверкой параметров в конце URI, например:

В базе данных я получаю правило для URI: /uaa/api/users/*/city/*

Заменим '*' на регулярное выражение, чтобы оно принимало любой символ между / или после /: ^/uaa/api/users/+(.*)+/city/+(.*)$

Я сравниваю URI с регулярным выражением с URI запроса: /uaa/api/users/john.connor/city/12

Но если я удаляю значение в конце URI и оставляю только /, он принимает то, что мне нужно, чтобы он потерпел неудачу, потому чтопосле / нет значения, то есть при использовании регулярного выражения ^/uaa/api/users/+(.*)+/city/+(.*)$ с URI /uaa/api/users/john.connor/city/ мне нужно, чтобы он потерпел неудачу, потому что после / нет значения. Как я могу это сделать, чтобы он не принял бесполезный столбец, за которым следуетв конце?

Я не знаю, имеет ли это значение, но я использую регулярное выражение в Java!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Есть несколько моментов, которые следует отметить относительно шаблона, который вы используете.

Плюс в /+ - это квантификатор в этом контексте, который встречается в 1+ раз больше косой черты.Эта часть (.*)+ также использует этот квантификатор для повторения группы, которая сама соответствует 0+ раз любому символу (включая косую черту).

Я думаю, что вы ищете, чтобы сопоставить не косую черту, используяОтрицательный класс символов [^/]+ между косой чертой и последней частью, а также, чтобы URL не заканчивался косой чертой.

^/uaa/api/users/[^/]+/city/[^/]+$

См. регулярное выражение демо

0 голосов
/ 11 февраля 2019

Здесь

Содержит хотя бы один символ из каждой из следующих категорий.

Строчный символ Прописный символ Цифра Символ

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)

(?=.*[a-z])        // use positive look ahead to see if at least one lower case letter exists
(?=.*[A-Z])        // use positive look ahead to see if at least one upper case letter exists
(?=.*\d)           // use positive look ahead to see if at least one digit exists
(?=.*\W])        // use positive look ahead to see if at least one non-word character exists
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...