use strict; use warnings; use Readonly; Readonly::Scalar my $PREFIX => qr/DOC_/; Readonly::Scalar my $FILTER => qr/ $PREFIX (?: [A-Za-z]+\d* | [A-Za-z]*\d+ ) - [0-9a-z]{3} /x; my @tags = qw( DOC_001_123 DOC_002_214 DOC_001-548 DOC_001-987 ); my @dash_tags = grep {/$FILTER/} @tags; print "@dash_tags\n";