Используйте регулярные выражения для поиска URL без определенных шаблонов слов

Я пытаюсь написать регулярное выражение, которое может соответствовать URL, которые не имеют определенного шаблона. У URL, которые я пытаюсь отфильтровать, не должно быть идентификатора, который состоит из 40 шестнадцатеричных заглавных символов.

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

/dev/api/appid/A1B2C3D4E5A1B2C3D4E5A1B2C3D4E5A1B2C3D4E5/users

/dev/api/apps/list

/dev/api/help/apps/applicationname/apple/osversion/list/

(URL составлены, но идея в том, что есть некоторые конечные точки с идентификаторами длиной 40, и некоторые конечные точки, которые этого не делают, и некоторые конечные точки, которые действительно длинные в общем количестве символов)

Я хочу убедиться, что регулярное выражение может соответствовать только двум последним URL-адресам, а не первому.

Я написал следующее регулярное выражение,

\S+(?:[0-9A-F]{40})\S+

и это соответствует конечным точкам, которые имеют длинный идентификатор в них, но пропускает те, которые должны быть отфильтрованы. Если я попытаюсь опровергнуть регулярное выражение,

\S+(?![0-9A-F]{40})\S+

Он соответствует всем конечным точкам, потому что некоторые URL-адреса имеют длину, превышающую значение идентификатора (40 символов).

Как я могу использовать регулярное выражение для фильтрации именно тех URL, которые мне нужны?

2 ответа

Решение

Попробуйте это регулярное выражение:

^(?!.*\/[0-9A-F]{40}\/).*$

Нажмите для демонстрации

Объяснение:

  • ^ - утверждает начало строки / URL
  • (?!.*\/[0-9A-F]{40}\/) - Отрицательный Lookahead, чтобы проверить наличие / затем ровно 40 символов HEX с последующим / где-то в строке Поскольку это негативный взгляд, любая строка / URL, содержащая этот шаблон, не будет сопоставлена.
  • .* - соответствует 0+ вхождений любого символа, кроме символа новой строки
  • $ - утверждает конец строки
^((?![A-F0-9]{40}).)*$

Использует отрицательный прогноз, чтобы соответствовать любой строке, в которой нет 40 шестнадцатеричных цифр подряд. Попробуй это здесь.

Другие вопросы по тегам