perl 按文件名模式选择文件

3phpmpom  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(139)

在我的目录中,我有以下文件名模式:

1.模式

2018_09_01_Filename.java

2.模式

kit-deploy-190718_Filename.java
现在,我尝试选择目录中与第一个模式匹配的每个文件(日期可以不同,但总是year_month_day)。
我一直在想,我可以从文件中分离出基本名称,这样我就可以得到前十个字符。然后我会看看这是否与一个模式匹配。

my $filename = basename($file);

my $chars = substr($filename, 0 , 10);

if ($chars =~ m/2000_01_01/) {

    print "match\n";

}
else {
    print "Don't match";
}
eoigrqb6

eoigrqb61#

您只需要一个符合您需求的正则表达式,例如:

#!/usr/bin/perl

my $filename = "2018_09_01_Filename.java";

if ($filename =~ m/\D?20\d{2}_\d{2}_\d{2}\D?/) {
    print "match\n";
}

说明

  • \D?匹配任何非数字字符
  • ? Quantifier -匹配0到1次,尽可能多次,根据需要返回(贪婪)
  • 20按字面匹配字符20(区分大小写)
  • \d{2}匹配数字
  • {2}量词-正好匹配2次
  • _与字符_完全匹配
  • \d{2}匹配数字
  • {2}量词-正好匹配2次
  • _与字符_完全匹配
  • \d{2}匹配数字
  • {2}量词-正好匹配2次
  • \D?匹配任何非数字字符
  • ? Quantifier -匹配0到1次,尽可能多地匹配,根据需要返回(贪婪)

检查demo

相关问题