正则表达式从URL中提取文件扩展名

ran*_*its 4 php regex

我正在寻找一个.js与以下URI 匹配的正则表达式:

 /foo/bar/file.js?cache_key=123
Run Code Online (Sandbox Code Playgroud)

我正在编写一个函数,试图识别作为参数传入的文件类型.在这种情况下,文件以扩展名结尾,.js是一个javascript文件.我正在使用PHP和preg_match所以我假设这是一个PCRE兼容的正则表达式.最终,我将构建此表达式,并能够检查作为URI传递的多种文件类型,这些URI不仅限于js,还可能是css,图像等.

i a*_*ien 6

您可以使用pathinfo正则表达式的组合.pathinfo将为您提供扩展加上?cache_key=123,然后您可以删除?cache_key=123?之后匹配的正则表达式:

$url = '/foo/bar/file.js?cache_key=123';

echo preg_replace("#\?.*#", "", pathinfo($url, PATHINFO_EXTENSION)) . "\n";
Run Code Online (Sandbox Code Playgroud)

输出:

js
Run Code Online (Sandbox Code Playgroud)

输入:

$url = 'my_style.css?cache_key=123';
Run Code Online (Sandbox Code Playgroud)

输出:

css
Run Code Online (Sandbox Code Playgroud)

显然,如果你需要.,将它添加到文件扩展名字符串是微不足道的.

ETA:如果你确实想要一个正则表达式解决方案,这将解决问题:

function parseurl($url) {
    # takes the last dot it can find and grabs the text after it
    echo preg_replace("#(.+)?\.(\w+)(\?.+)?#", "$2", $url) . "\n";
}

parseurl('my_style.css');
parseurl('my_style.css?cache=123');
parseurl('/foo/bar/file.js?cache_key=123');
parseurl('/my.dir.name/has/dots/boo.html?cache=123');
Run Code Online (Sandbox Code Playgroud)

输出:

css
css
js
html
Run Code Online (Sandbox Code Playgroud)