如果文件网址有一定的扩展名,正则表达式会发现什么

时间:2011-01-10 04:06:10

标签: php regex

我的有效网址可能看起来或多或少像这样

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部分

如果存在,我如何使用正则表达式来了解文件扩展名?正则表达式是正确的工具吗?

4 个答案:

答案 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"

See is on CodePad.org

可以使用正则表达式,但要遵循它会更加困难。

答案 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"

http://php.net/parse-url

http://php.net/substr

http://php.net/strrpos

相关问题