use strict; use warnings; my @files = ("zzz.21.yy.ccc", "zzz.220.ccc"); foreach my $name (@files) { chomp $name; if ($name =~ /(^[a-z]{3})\.(\d{2,3})\..*\.ccc/) { print "yes, $name, match1: $1, match2: $2\n"; } else { print "no, $name\n"; } } #### yes, zzz.21.yy.ccc, match1: zzz, match2: 21 no, zzz.220.ccc