在 Perl 中使用正则表达式提取文件名的一部分
Extract portion of filename with Regex in Perl
我在文件系统中有一个文件目录:
111111.222.log
222222.33.log
444444.0.log
如果我可以访问变量 $id
,其中 $id
是第一个 .
之前的数字的第一部分,我如何获得数字的第二部分?
$id
是已知值,$unknown
数字的第二部分是我想从文件名中提取的内容(如果存在)。
是否有一些有效的方法可以在不将整个文件目录保存到数组中的情况下完成此操作,然后使用 split
遍历每个元素?
我的想法是这样的:
if (-e '$id.(\d+).log') {
$unknown = ;
}
以上不是有效代码,只是一个想法。
相反,如果我可以访问完整的字符串,我用于提取的正则表达式是(其中 22
是 $unknown
):
"158855.22.log" =~ /^(\d+)\.(\d+)\.log$/;
print "ID is \n";
print "Unknown is \n";
您可以将 glob
与正则表达式匹配相结合:
foreach my $filename (glob "$id.*.log")
{
if ($filename =~ /^(\d+)\.(\d+)\.log$/)
{
print "ID is \n";
print "Unknown is \n";
}
}
我在文件系统中有一个文件目录:
111111.222.log
222222.33.log
444444.0.log
如果我可以访问变量 $id
,其中 $id
是第一个 .
之前的数字的第一部分,我如何获得数字的第二部分?
$id
是已知值,$unknown
数字的第二部分是我想从文件名中提取的内容(如果存在)。
是否有一些有效的方法可以在不将整个文件目录保存到数组中的情况下完成此操作,然后使用 split
遍历每个元素?
我的想法是这样的:
if (-e '$id.(\d+).log') {
$unknown = ;
}
以上不是有效代码,只是一个想法。
相反,如果我可以访问完整的字符串,我用于提取的正则表达式是(其中 22
是 $unknown
):
"158855.22.log" =~ /^(\d+)\.(\d+)\.log$/;
print "ID is \n";
print "Unknown is \n";
您可以将 glob
与正则表达式匹配相结合:
foreach my $filename (glob "$id.*.log")
{
if ($filename =~ /^(\d+)\.(\d+)\.log$/)
{
print "ID is \n";
print "Unknown is \n";
}
}