->$_,$n {S:g/(.)$0**{$n..*}/{$0 x$n}/}
->$_,\n{S:g/(.)$0**{n..*}/{$0 x n}/}
说明:
-> $_, \n { # pointy block lambda
# regex replace ( return without modifying variant )
# globally
S:global /
# a char
(.)
# followed by 「n」 or more identical chars
$0 ** { n .. * }
/{
# repeat char 「n」 times
$0 x n
}/
}
测试:
#! /usr/bin/env perl6
use v6.c;
use Test;
my &truncate-char-runs-to = ->$_,\n{S:g/(.)$0**{n..*}/{$0 x n}/}
my @tests = (
("aaaaaaabbbccCCCcc", 2) => "aabbccCCcc",
("aaabbbc", 1) => "abc",
("abcdefg", 0) => "",
("aaaaaaabccccccccCCCCCC@", 4) => "aaaabccccCCCC@",
);
plan +@tests;
for @tests -> $_ ( :key(@input), :value($expected) ) {
is truncate-char-runs-to(|@input), $expected, qq'("@input[0]", @input[1]) => "$expected"';
}
1..4
ok 1 - ("aaaaaaabbbccCCCcc", 2) => "aabbccCCcc"
ok 2 - ("aaabbbc", 1) => "abc"
ok 3 - ("abcdefg", 0) => ""
ok 4 - ("aaaaaaabccccccccCCCCCC@", 4) => "aaaabccccCCCC@"