Подсчет совпадений регулярных выражений в 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";
Единственная проблема с этим состоит в том, что он потребляет слишком много ресурсов для тестовых случаев, когда итоговое число совпадений составляет порядка миллионов и более. Но я понимаю, что это связано с тем, что все матчи сначала группируются и учитываются только после. Я ищу ресурсосберегающее решение, котороевозвращает только количество.