从文件路径字符串中提取带有扩展名的文件名

Posted

技术标签:

【中文标题】从文件路径字符串中提取带有扩展名的文件名【英文标题】:Extract filename with extension from filepath string 【发布时间】:2011-03-10 03:55:42 【问题描述】:

我希望从文件路径字符串的末尾获取文件名,比如说

$text = "bob/hello/myfile.zip";

我希望能够获取文件名,我猜这将涉及获取最后一个斜杠之后的所有内容作为子字符串。谁能帮助我如何做到这一点是php?一个简单的函数,如:

$fileName = getFileName($text);

【问题讨论】:

查看:php.net 上的 strrchr(),或按照建议使用基本名称 【参考方案1】:

查看basename()

【讨论】:

【参考方案2】:

对于更一般的需求,启动参数使用负值。 例如

<?php
$str = '001234567890';
echo substr($str,-10,4);
?>

将输出 第1234章

使用负参数表示从头到尾的第一个字符开始。

【讨论】:

虽然其他问题解决了真正的问题,但 OP 完美地回答了标题中的问题。谢谢,我很确定我只需要使用负数但想要确认。【参考方案3】:
$text = "bob/hello/myfile.zip";
$file_name = end(explode("/", $text));
echo $file_name; // myfile.zip

end() 返回给定数组的最后一个元素。

【讨论】:

【参考方案4】:

正如 Daniel 所发布的,对于此应用程序,您希望使用 basename()。对于更一般的需求,strrchr() 完全符合本文标题的要求。

http://us4.php.net/strrchr

【讨论】:

【参考方案5】:

我想你可以使用 strrpos 找到最后一个'/',然后得到那个子字符串:

$fileName = substr($text, strrpos($text, '/')+1);

虽然您可能实际上想首先检查以确保其中有一个“/”。

【讨论】:

或者你可以使用 basename(),就像他们说的那样。这样更好。【参考方案6】:
function getSubstringFromEnd(string $string, int $length)

    return substr($string, strlen($string) - $length, $length);


function removeSubstringFromEnd(string $string, int $length)

    return substr($string, 0, strlen($string) - $length);


echo getSubstringFromEnd("My long text", 4); // text
echo removeSubstringFromEnd("My long text", 4); // My long

【讨论】:

请为您的答案添加一些解释。在我看来,您似乎不能简单地用它删除文件扩展名 @NicoHaase 我为此添加了一个方法。 该代码是如何工作的?不是四个字符长的文件扩展名怎么办?如果在调用您的魔法函数之一之前不知道该扩展的长度,那它应该如何工作?

以上是关于从文件路径字符串中提取带有扩展名的文件名的主要内容,如果未能解决你的问题,请参考以下文章

从完整路径名中提取文件名(不带扩展名)

python 从路径目录,文件基名和文件扩展名中分离/提取

如何从文件路径字符串中提取目录?

带盘符的全路径文件名是啥?

给定文件系统路径,是不是有更短的方法来提取没有扩展名的文件名?

从 Perl 中的字符串中删除文件扩展名和路径