我想获取一个没有路径的文件名(如果它是字符串的一部分)以及扩展名。
例如:
/path/to/file/fileName.txt # results in "fileName"
fileName.txt # results in "fileName"
/path/to/file/file.with.periods.txt # results in "file.with.periods"
所以基本上,我想删除之前的任何内容,包括最后一个“/”(如果存在)以及最后一个“。”以及之后的任何元字符。
很抱歉这样的新手问题,但我是perl的新手。
答案 0 :(得分:37)
为了便于获取给定完整路径的文件的基本名称,我建议使用File::Basename
模块,它是核心的一部分。
要对文件扩展名进行启发式操作,我会选择正常的表达式,例如
(my $without_extension = $basename) =~ s/\.[^.]+$//;
答案 1 :(得分:17)
虽然其他人已经回复了,但是根据rafl的答案读了一下basename:
($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"
似乎在一行中解决问题。
是否存在与此相关的问题,与其他解决方案相反?
答案 2 :(得分:14)
你可以通过简单的替换来做到这一点:
$name =~ s{.*/}{}; # removes path
$name =~ s{\.[^.]+$}{}; # removes extension
此示例假定/
是路径分隔符。