Подсчет совпадений регулярных выражений в Perl ИЛИ Ruby

Это продолжение кэтот вопрос, Я узнал, что найти перекрывающиеся совпадения с регулярными выражениями в Python непросто, поэтому решил сделать дополнительный запрос, чтобы увидеть, как Perl и Ruby справляются с этой задачей.

я бы хотелподсчитывать количество всех возможных совпадений регулярного выражения с определенной строкой. Под словом «все» я подразумеваю, что результат должен учитывать как перекрывающиеся, так и неуникальные совпадения. Вот некоторые примеры:

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";

Единственная проблема с этим состоит в том, что он потребляет слишком много ресурсов для тестовых случаев, когда итоговое число совпадений составляет порядка миллионов и более. Но я понимаю, что это связано с тем, что все матчи сначала группируются и учитываются только после. Я ищу ресурсосберегающее решение, котороевозвращает только количество.

Ответы на вопрос(1)

Ваш ответ на вопрос