Regex для сопоставления строки, содержащей хотя бы одну ди git и одно число с заданной длиной c - PullRequest
0 голосов
/ 10 апреля 2020

Ну, есть миллионы вопросов с подобными топи c - у меня есть каждый ответ, но безуспешно: (

У меня есть набор URL:

https://test-gateway.com/newUserCustomerOrder
https://test-gateway.com/newUserCustomerOrder/5e8f39ee5bd0920012e40a13
https://test-gateway.com/newUserCustomerOrder/5e8f39f65bd0920012e40a14
https://test-gateway.com/newUserCustomerOrder/5e8f3a045bd0920012e40a15
https://test-gateway.com/newUserCustomerOrder/5e8fd4755bd0920012e411fd
https://test-gateway.com/newUserCustomerOrder/5e8fd4e35bd0920012e4120b
https://test-gateway.com/newUserCustomerOrder/5e8fd4eb5bd0920012e4120d

Я хотел бы найти orderIds (они появятся в произвольном месте внутри этого URL для конкретного сценария ios), например:

(?=.*\d)[a-zA-Z\d]{18,24}

К сожалению, перехватить оба идентификатора 5e8f39ee5bd0920012e40a13 и имя адаптера newUserCustomerOrder Я хотел бы иметь возможность отлавливать каждую строку с длиной в диапазоне {18,24}, которая содержит хотя бы одну ди git.

Может кто-нибудь подсказать, как сделать это работает?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

Вместо того, чтобы смотреть вперед .*\d, ищите слова , затем \d, исключая, таким образом, newUserCustomerOrder/, поскольку он содержит sla sh:

(?=\w*\d)[a-zA-Z\d]{18,24}

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

2 голосов
/ 10 апреля 2020

Вы можете использовать это регулярное выражение:

(?=[^/]*\d)([a-zA-Z\d]{18,24})

Демонстрация RegEx

(?=[^/]*\d) является положительным прогнозом для подтверждения присутствия di git после 0 или более не- / символов.

2 голосов
/ 10 апреля 2020

Попробуйте использовать следующий шаблон регулярных выражений:

\b(?=[^/]*\d)\w{18,24}\b

Демо

Объяснение регулярного выражения:

\b           match a word boundary (most likely /)
(?=[^/]*\d)  then assert that a digit follows in the next segment of the URL,
             without passing /
\w{18,24}    match 18 to 24 word characters
\b           match another word boundary

Вот строчная строка в Java с использованием этого регулярного выражения:

String url = "https://test-gateway.com/newUserCustomerOrder/5e8f39f65bd0920012e40a14";
String orderId = url.replaceAll(".*\\b((?=[^/]*\\d)\\w{18,24})\\b.*", "$1");
System.out.println(orderId);

Это печатает:

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