my @chunks = map qr{(?=.*$_)}, ( qr{\d}, qr{[a-z]}, qr{[A-Z]}, qr{[@#$%^&+=]}, ); my @transformed; for my $i (0..$#chunks) { my $r = ''; for my $j (0..$#chunks) { $r .= $chunks[$j] if $j != $i; } push @transformed, $r; } my $regex = = join '|', @transformed; $regex = qr{^.*(?=.{10,})(?:$regex)};