在我的目录中,我遵循文件名模式:
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";
}
答案 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