应该很简单,但我无法应付它.
我想匹配与bs完全相同的数量.所以,以下
my $input = 'aaabbbb'; $input ~~ m:ex/ ... /;
应该产生:
aaabbb aabb ab
UPD:以下变体不起作用,可能是因为:@smls’s answer中提到的:ex bug(但更可能是因为我犯了一些错误?):
> my $input = "aaabbbb"; > .put for $input ~~ m:ex/ (a) * (b) * <?{ +$0 == +$1 }> /; Nil > .put for $input ~~ m:ex/ (a) + (b) + <?{+$0 == +$1}> /; Nil
这个,有:ov和?,有效:
> my $input = "aaabbbb"; > .put for $input ~~ m:ov/ (a)+ (b)+? <?{+$0 == +$1}> /; aaabbb aabb ab
UPD2:以下解决方案适用于:ex,但我必须在没有<?...>的情况下执行此操作.断言.
> $input = 'aaabbbb' > $input ~~ m:ex/ (a) + (b) + { put $/ if +$0 == +$1 } /; aaabbb aabb ab
解决方法
my $input = "aaabbbb"; say .Str for $input ~~ m:ov/ (a)+ b ** {+$0} /;
输出:
aaabbb aabb ab
它应该用于:ex而不是:ov,但是Rakudo bug #130711目前可以防止这种情况.