Это продолжение этого вопроса .Я узнал, что найти перекрывающиеся совпадения с регулярными выражениями в Python непросто, поэтому решил сделать дополнительный запрос, чтобы узнать, как Perl и Ruby справляются с этой задачей.
Я бы хотел count количество всех возможных совпадений регулярного выражения с определенной строкой.Под словом «все» я подразумеваю, что результат должен учитывать как перекрывающиеся, так и неуникальные совпадения.Вот несколько примеров:
a.*k
должно совпадать дважды в "akka"
"bbboob"
, проверенных против b.*o.*b
, должно дать 6
Для справки, вот одна строчка Perl, предложенная tchrist - она выводит правильные совпадения и их количество:
() = "bbboobb" =~ /(b.*o.*b)(?{push @all, $1})(*FAIL)/g; printf "got %d matches: %s\n", scalar(@all), "@all";
Единственная проблема с этим состоит в том, что она тоже естмного ресурсов для тестовых случаев, когда итоговое число совпадений составляет порядка миллионов и более.Но я понимаю, что это связано с тем, что все матчи сначала группируются и учитываются только после.Я ищу ресурсосберегающее решение, которое возвращает только число .