应该很简单,但我无法应付它.
我想匹配与as 完全相同的bs数.所以,以下
my $input = 'aaabbbb';
$input ~~ m:ex/ ... /;
Run Code Online (Sandbox Code Playgroud)
应该产生:
aaabbb
aabb
ab
Run Code Online (Sandbox Code Playgroud)
UPD:以下变种不起作用,可能是因为@ smls的答案中: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
Run Code Online (Sandbox Code Playgroud)
这个,:ov和?,工作:
> my $input = "aaabbbb";
> .put for $input ~~ m:ov/ (a)+ (b)+? <?{+$0 == +$1}> /;
aaabbb
aabb
ab
Run Code Online (Sandbox Code Playgroud)
UPD2:以下解决方案也适用:ex,但我必须在没有<?...>断言的情况下完成.
> $input = 'aaabbbb'
> $input ~~ m:ex/ (a) + (b) + { put $/ if +$0 == +$1 } /;
aaabbb
aabb
ab
Run Code Online (Sandbox Code Playgroud)
my $input = "aaabbbb";
say .Str for $input ~~ m:ov/ (a)+ b ** {+$0} /;
Run Code Online (Sandbox Code Playgroud)
输出:
aaabbb
aabb
ab
Run Code Online (Sandbox Code Playgroud)
它应该与之合作:ex而不是:ov- 但是Rakudo bug#130711目前可以防止这种情况发生.
my $input = "aaabbbb";
say .Str for $input ~~ m:ov/ a <~~>? b /;
Run Code Online (Sandbox Code Playgroud)
与工作ex太
my $input = "aaabbbb";
say .Str for $input ~~ m:ex/ a <~~>? b /;
Run Code Online (Sandbox Code Playgroud)
<~~>意味着递归地称自己为Extensible metasyntax.(尚未完全实施.)
以下(更长,但可能更清晰)示例也有效:
my $input = "aaabbbb";
my token anbn { a <&anbn>? b}
say .Str for $input ~~ m:ex/ <&anbn> /;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |