我的有效网址可能看起来或多或少像这样
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部分,因此它是网址的some/path/file.pdf
部分
如果存在,我如何使用正则表达式来了解文件扩展名?正则表达式是正确的工具吗?
答案 0 :(得分:10)
我会使用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"
你可以使用正则表达式,但要遵循它会更加困难。
答案 1 :(得分:1)
您可能需要执行HTTP HEAD请求。正则表达式肯定会起作用,但你不能保证能够捕获所有情况。
例如:
http://someurl.com/some/path/file可能是没有扩展名的文本文件(就像在大多数* nix系统上一样),并且正则表达式无法提供文件扩展名。
答案 2 :(得分:1)
更好的选择是PHP的parse_url功能:
$path = parse_url($url, PHP_URL_PATH);
$extension = ($pos = strrpos($path, '.')) ? substr($path, $pos) : "";
答案 3 :(得分:1)
不需要正则表达式,我们只能使用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"