我有一个文件,我需要取其名称:
/var/www/foo/dog.tur-tles.chickens.txt
我想只匹配:
dog.tur-tles.chickens
我在regexer中试过这个:
([^\/]*)$
匹配:
dog.tur-tles.chickens.txt
我无法弄清楚如何只排除最后一段时间。
你可以假设它总是一个.txt,但我想建立一种能力,如果一个文件名为dog-turtles.txt.txt
,它会看到名称是dog-turtles.txt
。
答案 0 :(得分:1)
只需将.txt
添加到你的正则表达式中,因为默认情况下*会贪婪,直到最后才会匹配所有内容.txt
([^\/]*)\.txt$
<强>输入:强>
/var/www/foo/dog.tur-tles.chickens.txt.txt
/var/www/foo/dog.tur-tles.chickens.txt
<强>输出:强>
dog.tur-tles.chickens.txt
dog.tur-tles.chickens
请参阅DEMO
答案 1 :(得分:1)
您可以使用File::Basename.fileparse
获取文件名,然后使用rindex
获取.
的最后一个索引,然后使用substr
获取所需的子字符串:
use File::Basename;
$x = fileparse('/var/www/foo/dog.tur-tles.chickens.txt');
print substr($x, 0, rindex($x, '.')) . "\n";
dog.tur-tles.chickens
答案 2 :(得分:1)
$name = ($pathname =~ s{.*/}{}r =~ s{\.[^.]+$}{}r)