正则表达式如何查找文件URL是否具有特定扩展名

5
我的有效网址可能看起来有些类似于这个样子。
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,也可能没有扩展名。

我已经存储了不包含 someurl.com 部分的 url,因此它是 url 的 some/path/file.pdf 部分。

我该如何使用正则表达式来确定文件扩展名是否存在? 正则表达式是否是正确的工具?


1
在技术上,URL(统一资源定位符)没有“扩展名”,因为它们不是文件,或者至少不一定是。要查找资源/媒体类型,使用 get_headers() 更准确。但另一方面,它大多数情况下也能工作。 - mario
4个回答

12

我会使用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上查看它

可以使用正则表达式,但这将更难跟踪。


1
你可能需要进行HTTP HEAD请求。正则表达式肯定可以工作,但不能保证捕捉所有情况。例如:http://someurl.com/some/path/file 可能是没有扩展名的文本文件(就像大多数*nix系统上一样),正则表达式无法提供文件扩展名。

1
一个更好的选择是PHP的parse_url函数:
$path = parse_url($url, PHP_URL_PATH);
$extension = ($pos = strrpos($path, '.')) ? substr($path, $pos) : "";

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接