Regex для определения URL, где последний «сегмент» содержит точку - PullRequest
0 голосов
/ 04 июня 2009

Мне нужно регулярное выражение, которое определяет, является ли данная строка URL-адресом для [потенциального] файла, т.е.
/file.pdf
http://www.whatever.com/file.docx
../file.longfileextension
Спасибо, ребята

Ответы [ 3 ]

2 голосов
/ 04 июня 2009

Вы можете проверить конец, чтобы увидеть, выглядит ли он как расширение файла, но URL-адреса на самом деле не отображаются на файлы; Что делать, если URL переписан?

Если вы хотите определить, к чему разрешен данный URL-адрес, вы можете выполнить запрос HEAD и проверить заголовки content-type и content-disposition, чтобы определить, относится ли содержимое к типу, который подразумевает базовый файл, но даже это не является пуленепробиваемым, поскольку изображения, PDF и т. д. могут генерироваться динамически.

1 голос
/ 04 июня 2009

Вы не можете.

например. http://example.com/files/readme может быть текстовым файлом или папкой (операционные системы в стиле * nix обычно не добавляют расширение .txt).

Даже при наличии расширения файла файл может отсутствовать, так как код на стороне сервера обрабатывает URL-адрес для создания содержимого (например, ASP.NET HttpHandler).

Почему вы пытаетесь это сделать? Если вы хотите определить, будет ли URL возвращать файл, вы можете угадать с расширением (помня, что приложения могут сами изобретать свои собственные), но единственный реальный способ - выполнить запрос HTTP HEAD и проверить возвращаемый тип содержимого но опять же у вас та же проблема с тем, что является допустимым типом файла MIME).

0 голосов
/ 04 июня 2009

Это выражение сделает работу.

^.*/(?<filename>[^/]+?\.[^/]+)$
    ^                 Anchor to the begining of the string
    .*                Any character zero or more times
    /                 Slash
    (?<filename>      Named group 'filename'
       [^/]+?            Not a slash at least once and captured lazily
       \.                One file extension separator (dot)
       [^/]+             Not a slash at leats once
    )                 End of named group
    $                 Anchor to the end of the string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...