Chr*_*ris 29 regex perl file-extension filepath
我想获取一个没有路径的文件名(如果它是字符串的一部分)以及扩展名.
例如:
/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"
Run Code Online (Sandbox Code Playgroud)
所以基本上,我想要删除之前的任何内容,包括最后一个"/"(如果存在)以及最后一个"." 以及之后的任何元字符.
很抱歉这样的新手问题,但我是perl的新手.
raf*_*afl 38
为了便于获取给定完整路径的文件的基本名称,我建议使用该File::Basename模块,它是核心的一部分.
要对文件扩展名进行启发式检测,我会选择正则表达式
(my $without_extension = $basename) =~ s/\.[^.]+$//;
Run Code Online (Sandbox Code Playgroud)
Chr*_*ris 18
虽然其他人已经做出回应,但在阅读了一下基本名称后,根据rafl的回答:
($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"
Run Code Online (Sandbox Code Playgroud)
似乎在一行中解决问题.
有没有与此相关的问题,与其他解决方案相反?
Eug*_*ash 16
你可以用简单的替换来做到这一点:
$name =~ s{^.*/}{}; # remove the leading path
$name =~ s{\.[^.]+$}{}; # remove the extension
Run Code Online (Sandbox Code Playgroud)
此示例假定这'/'是路径分隔符.