my $len = 0;
my $best = "";
while ($string =~ /((.)(?:(*SKIP)\2){$len,})/g) {
$len = length $1;
$best = $1
}
print "best: $best\n"
But that is still not completely efficient: the regexp is recompiled at every loop iteration because of $len, so maybe the following simpler code could be faster:
my $best = "";
while ($string =~ /((.)\2+)/g) {
$best = $1 if length $1 > length $best
}
print "best: $best\n"
Or maybe this more convoluted variation:
my $best = "";
$best = $1 while $string =~ /((.)\2*)(*SKIP)(?(?{length $^N <= length
+$best})(*FAIL))/g;
print "best: $best\n"
|