Например, слово debacle будет работать из-за debac, но морское дно не будет работать, потому что: 1. не существует c в любой 5-символьной последовательности, которая может быть сформирована, и 2. буква e появляется дважды. В качестве другого примера обратная связь будет работать из-за edbac. И помните, что решение должно быть выполнено с использованием только регулярных выражений.
Стратегия, которую я попытался реализовать, заключалась в следующем: соответствие первой букве, если она находится внутри [a-e], и запомнить ее. Затем найдите следующую букву в [a-e], но не первую букву. И так далее. Я не был уверен, что такое синтаксис (или даже если какой-то синтаксис существует), поэтому мой код не работал:
open(DICT, "dictionary.txt");
@words = <DICT>;
foreach my $word(@words){
if ($word =~ /([a-e])([a-e^\1])([a-e^\1^\2])([a-e^\1^\2^\3])([a-e^\1^\2^\3^\4])/
){
print $word;
}
}
Я также думал об использовании (? = regex) и \G, но я не был уверен, как это сработает.