我正在寻找一个与以下URI中的.js相匹配的正则表达式:
/foo/bar/file.js?cache_key=123
我正在编写一个函数,试图识别作为参数传入的文件类型.在这种情况下,文件以扩展名.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";
输出:
js
输入:
$url = 'my_style.css?cache_key=123';
输出:
css
显然,如果你需要.,将它添加到文件扩展名字符串是微不足道的.
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');
输出:
css
css
js
html
标签:php,regex
来源: https://codeday.me/bug/20190528/1172389.html