簡體   English   中英

什么正則表達式會找出文件 url 是否具有特定擴展名

[英]What regex would find out if file url has certain extension

我的有效網址可能看起來或多或少像這樣

http://someurl.com/some/path/file.pdf
or 
http://someurl.com/some/path/file.pdf?param=value
or 
http://someurl.com/some/path/file.pdf?param=value&second=val

其中文件擴展名可以是 .pdf,或其他一些擴展名,如 .jpg 或 .psd,或者什么都沒有。

我存儲的 url 沒有 someurl.com 部分,所以它是 url 的some/path/file.pdf部分

如果存在文件擴展名,我如何使用正則表達式知道它? 正則表達式是正確的工具嗎?

我會使用parse_url()pathinfo() 這些是工作中最正確的功能。

$url = 'http://someurl.com/some/path/file.pdf?param=value';

$path = parse_url($url, PHP_URL_PATH);

$ext = pathinfo($path, PATHINFO_EXTENSION);

var_dump($ext); // string(3) "pdf"

請參閱 CodePad.org

可以使用正則表達式,但會更難以遵循。

您可能需要執行 HTTP HEAD 請求。 正則表達式肯定會起作用,但不能保證您能捕獲所有情況。

例如:

http://someurl.com/some/path/file可能是一個沒有擴展名的文本文件(就像在大多數 *nix 系統上一樣)並且正則表達式將無法提供文件擴展名。

更好的選擇是 PHP 的parse_url函數:

$path = parse_url($url, PHP_URL_PATH);
$extension = ($pos = strrpos($path, '.')) ? substr($path, $pos) : "";

不需要正則表達式,我們可以只使用parse_url

$url = parse_url('http://example.com/path/to/file.php?param=value');

$extension = substr($url['path'], strrpos($url['path'], '.') + 1);
echo $extension; // outputs "php"

http://php.net/parse-url

http://php.net/substr

http://php.net/strrpos

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM