You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中提取不含后缀的文件名?字符串含未知数量斜杠

嘿,这个问题其实在PHP里有好几种简洁的解决办法,不用纠结手动处理斜杠的麻烦,我给你列几个实用的方案:

方案1:用pathinfo()(最推荐,最简洁)

这个函数专门用来解析路径信息,直接就能拿到不带扩展名的文件名,完全不用管前面有多少斜杠:

$str = "abc/def/ghi/name.extension";
$filename = pathinfo($str, PATHINFO_FILENAME);
echo $filename; // 输出 name

解释:pathinfo()会自动处理路径中的分隔符(不管是/还是\),PATHINFO_FILENAME常量指定返回不带扩展名的文件名部分,完美匹配你的需求,就算文件名里有多个点(比如name.v1.ext)也能正确提取名称部分。

方案2:结合basename()和explode()

如果你习惯用basename()先拿到路径的最后一段(带扩展名的文件名),再拆分扩展名:

$str = "abc/def/ghi/name.extension";
$fullFilename = basename($str); // 得到 name.extension
list($name) = explode('.', $fullFilename, 2); // 只拆分第一个点
echo $name; // 输出 name

解释:basename()直接返回路径最后一个斜杠后的内容,explode('.', ..., 2)的第三个参数限制只拆分一次,这样就算文件名里包含多个点,也只会拿到第一个点之前的部分,避免出错。

方案3:手动字符串截取(适合理解底层逻辑)

如果你想自己手动处理字符串位置,可以用strrpos()找到最后一个斜杠和最后一个点的位置,再用substr()截取:

$str = "abc/def/ghi/name.extension";
// 找到最后一个斜杠的位置,加1是为了跳过斜杠本身
$lastSlashPos = strrpos($str, '/') + 1;
// 找到最后一个点的位置
$lastDotPos = strrpos($str, '.');
// 从斜杠后开始,截取到点之前的部分
$name = substr($str, $lastSlashPos, $lastDotPos - $lastSlashPos);
echo $name; // 输出 name

解释:strrpos()返回指定字符最后一次出现的位置,通过计算起始位置和截取长度就能精准拿到目标内容。不过这种方法需要额外处理边界情况(比如字符串没有斜杠或者没有点的情况),所以更推荐前两种方案。

内容的提问来源于stack exchange,提问作者user2037412

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:24:01