这是that question的后续行动。我已经了解到在Python中找到重叠的正则表达式匹配并不是直截了当的,因此决定进行额外的查询以了解Perl和Ruby如何经得起这项任务。
我想计算正则表达式与特定字符串的所有可能匹配项的数量。而“全部”我的意思是结果应该考虑重叠和非唯一匹配。以下是一些例子:
a.*k
应在"akka"
"bbboob"
测试的b.*o.*b
应该会产生6 作为参考,这是tchrist建议的Perl单行 - 它输出正确的匹配及其计数:
() = "bbboobb" =~ /(b.*o.*b)(?{push @all, $1})(*FAIL)/g; printf "got %d matches: %s\n", scalar(@all), "@all";
唯一的问题是,它会为测试用例占用太多资源,因为测试用例的匹配计数大约为数百万或更多。但据我所知,这是因为所有的比赛都是先分组,之后才计算。我正在寻找一种资源有效的解决方案,只返回计数。
答案 0 :(得分:6)
看起来tchrist完成了所有艰苦的工作。如果存储匹配并在之后计算它们会占用太多资源,那么您只需更改正则表达式嵌入代码即可计算匹配项:
my $count = 0;
"bbboobb" =~ /(b.*o.*b)(?{$count++})(*FAIL)/g;
print "got $count matches\n";