perl6 – 如何匹配Perl 6正则表达式中相同数量的不同原子?

前端之家收集整理的这篇文章主要介绍了perl6 – 如何匹配Perl 6正则表达式中相同数量的不同原子?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
应该很简单,但我无法应付它.

我想匹配与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目前可以防止这种情况.

猜你在找的Perl相关文章