我正在寻找一个.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,图像等.
您可以使用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)