Регулярное выражение для сопоставления URL-адреса без завершающей косой черты также без расширения файла

#regex

#регулярное выражение

Вопрос:

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

Я ищу соответствие первому URL-адресу, остальные не должны совпадать:

 https://subdomain.example.com/test <== only this should match
https://subdomain.example.com/paht/test.css
https://subdomain.example.com/path/path/test.js
https://example.com/test/
  

Я ищу соответствие только тем маршрутам, которые не имеют завершающих косых черт или расширений файлов.

Вот мое регулярное выражение: https:.*^(?!([^/]|(.[a-z]{2,8})))$

Вы можете попробовать здесь: https://regexr.com/5dic8

Ответ №1:

Используйте

 ^https?://(?:.*/)?[^/.] $
  

Смотрите Доказательство

Объяснение

 --------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  http                     'http'
--------------------------------------------------------------------------------
  s?                       's' (optional (matching the most amount
                           possible))
--------------------------------------------------------------------------------
  :                        ':'
--------------------------------------------------------------------------------
  /                       '/'
--------------------------------------------------------------------------------
  /                       '/'
--------------------------------------------------------------------------------
  (?:                      group, but do not capture (optional
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    .*                       any character except n (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
    /                       '/'
--------------------------------------------------------------------------------
  )?                       end of grouping
--------------------------------------------------------------------------------
  [^/.]                   any character except: '/', '.' (1 or more
                           times (matching the most amount possible))
--------------------------------------------------------------------------------
  $                        before an optional n, and the end of the
                           string
  

Комментарии:

1. Все ответы SO должны быть такими. Спасибо.

2. @LearnerFor-life полностью согласен, так приятно видеть подобные ответы!

Ответ №2:

Если вы уверены, что сопоставляете только URL-адреса, вы также можете изменить URL-адрес и использовать:

 ^w /
  
  • ^ Только в начале (которое в данном случае является концом)
  • w Любой набор буквенно-цифровых символов, в котором есть хотя бы один
  • / Для сопоставления косой черты

Было бы что-то вроде этого в python:

 re.search(r'^w /', url[::-1])
  

Если это не None так, то url заканчивается следующим образом: .../someword .

ПРИМЕЧАНИЕ: это только в том случае, если вы уверены, что url это действительно URL.