按文件名模式选择文件

时间:2019-07-02 09:26:45

标签: regex perl

在我的目录中,我遵循文件名模式:

  

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

1 个答案:

答案 0 :(得分:3)

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

#!/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?与任何不是数字的字符匹配

    • ?量词-匹配0到1次,尽可能多地匹配,并根据需要返回(贪婪)
  • 20从字面上匹配字符20(区分大小写)

  • \d{2}匹配一个数字

    • {2}量词-精确匹配2次
  • _从字面上匹配字符_

  • \d{2}匹配一个数字

    • {2}量词-精确匹配2次
  • _从字面上匹配字符_

  • \d{2}匹配一个数字

    • {2}量词-精确匹配2次
  • \D?与任何不是数字的字符匹配

    • ?量词-匹配0到1次,尽可能多地匹配,并根据需要返回(贪婪)

检查demo