匹配包含路径的文件名和名称中的句点

时间:2015-04-22 07:21:08

标签: regex perl

我有一个文件,我需要取其名称:

/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

3 个答案:

答案 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";

输出sample program

dog.tur-tles.chickens

答案 2 :(得分:1)

$name = ($pathname =~ s{.*/}{}r =~ s{\.[^.]+$}{}r)
  • 替换1:只删除dir
  • 替换2:如果是presente
  • ,只需删除扩展名