使用Perl中的Regex提取文件名的一部分

时间:2016-04-05 22:42:47

标签: regex perl file match glob

我在文件系统中有一个文件目录:

111111.222.log
222222.33.log
444444.0.log

如果我有权访问变量$id,其中$id是第一个.之前的数字的第一部分,我该如何获得该数字的第二部分?

$id是已知值,$unknown数字的第二部分是我想从文件名中提取的部分(如果存在)。

是否有一些有效的方法可以在不将整个文件目录保存到数组中的情况下完成此操作,然后使用split遍历每个元素?

我想到的是:

if (-e '$id.(\d+).log') {
    $unknown = $1;
}

以上不是有效的代码,只是一个想法。

相反,如果我有权访问完整的字符串,我用于提取的正则表达式是(22$unknown):

"158855.22.log" =~ /^(\d+)\.(\d+)\.log$/;
print "ID is $1\n";
print "Unknown is $2\n";

1 个答案:

答案 0 :(得分:3)

您可以将glob与正则表达式匹配结合使用:

foreach my $filename (glob "$id.*.log")
{
    if ($filename =~ /^(\d+)\.(\d+)\.log$/)
    {
        print "ID is $1\n";
        print "Unknown is $2\n";
    }
}