Вы можете использовать следующее соответствие регулярному выражению:
/
^
[^a-e]*+
(?: a [^bcde]*+
| b [^acde]*+
| c [^abde]*+
| d [^abce]*+
| e [^abcd]*+
)
\z
/x
Ниже приведен более простой шаблон, который может быть менее эффективным:
/ ^ [^a-e]*+ ([a-e]) (?: \1|[^a-e] )*+ \z /x
Решение без регулярных выражений может быть проще.
# Count the number of instances of each letter.
my %chars;
++$chars{$_} for split //;
# Count how many of [a-e] are found.
my $count = 0;
++$count for grep $chars{$_}, qw( a b c d e );
$count == 1