繁体   English   中英

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

[英]Extract portion of filename with Regex in Perl

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

111111.222.log
222222.33.log
444444.0.log

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

$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";

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM