Использование регулярных выражений для поиска слова с пятью буквами abcde, где каждая буква встречается ровно один раз, в любом порядке, без перерывов между ними.

Например, слово debacleбудет работать из-за debac, но морское дноне будет работать, потому что: 1. нет c в любой последовательности из 5 символов, которую можно составить, и 2. буква e встречается дважды. В качестве другого примера, feedbackбудет работать из-за edbac. И помните, решение должно быть сделано с использованием только регулярных выражений.

Стратегия, которую я пытался реализовать, заключалась в следующем: сопоставьте первую букву, если она находится внутри [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, но я не был уверен, как это сделать. получится.

14
задан kyothine 21 June 2012 в 17:14
поделиться