利用正則表達式從完整網址中提取含副檔名的檔案名稱:
function retrieve($url) {
// 匹配最後一個 / 之後、含點號的字串
preg_match('/\/([^\/]+\.[a-z]+)[^\/]*$/', $url, $match);
return $match[1] ?? '';
}
// 測試
echo retrieve('https://example.com/path/to/file.php?id=1'); // 輸出:file.php
結合 parse_url() 與字串分割,更穩健地解析副檔名:
function getExt($url) {
$path = parse_url($url, PHP_URL_PATH); // 只取路徑部分
$parts = explode('.', $path);
return end($parts); // 取最後一段
}
// 測試
echo getExt('https://tools.jb51.net/abc/de/fg.php?id=1'); // 輸出:php
function parseUrlFileInfo($url) {
$path = parse_url($url, PHP_URL_PATH);
$filename = basename($path); // 含副檔名的完整檔名
$extension = pathinfo($filename, PATHINFO_EXTENSION); // 純副檔名
$basename = pathinfo($filename, PATHINFO_FILENAME); // 不含副檔名的主檔名
return compact('filename', 'extension', 'basename');
}
print_r(parseUrlFileInfo('https://cdn.example.com/assets/app.v2.min.js?v=123'));
/*
Array
(
[filename] => app.v2.min.js
[extension] => js
[basename] => app.v2.min
)
*/
建議使用 PHP 內建 pathinfo() 與 parse_url(),比手寫正則更可靠、可讀性更高。