Raku 的正则表达式中有两种类型的交替:|和||。有什么不同 ?
say 'foobar' ~~ / foo || foobar / # ?foo?
say 'foobar' ~~ / foo | foobar / # ?foobar?
Run Code Online (Sandbox Code Playgroud) 我正在尝试重新执行我的程序以匹配所有,匹配任何匹配项目中的项目.关于Perl6的一些文档没有解释当前实现的行为(Rakudo 2018.04),我还有一些问题.
(1)关于正则表达式的文档说,将数组插入匹配正则表达式意味着"最长匹配"; 但是,这段代码似乎没有这样做:
> my $a="123 ab 4567 cde";
123 ab 4567 cde
> my @b=<23 b cd 567>;
[23 b cd 567]
> say (||@b).WHAT
(Slip)
> say $a ~~ m/ @b /
?23? # <=== I expected the match to be "567" (@b[3] matching $a) which is longer than "23";
Run Code Online (Sandbox Code Playgroud)
(2)(|| @b)是Slip; 如何轻松地对数组中的所有元素进行OR或AND而不显式循环遍历数组?
> say $a ~~ m:g/ @b /
(?23? ?b? ?567? ?cd?)
> say $a ~~ m:g/ ||@b /
(?23? ?b? ?567? ?cd?)
> say …Run Code Online (Sandbox Code Playgroud) 是否可以使用联结来匹配联结中的任何值?我想匹配数组中的任何值.这样做的正确方法是什么?
lisprog$ perl6
To exit type 'exit' or '^D'
> my @a=<a b c>
[a b c]
> any(@a)
any(a, b, c)
> my $x=any(@a)
any(a, b, c)
> my $y = "a 1"
a 1
> say $y ~~ m/ $x /
False
> say $y ~~ m/ "$x" /
False
> my $x = any(@a).Str
any("a", "b", "c")
> say $y ~~ m/ $x /
False
> say $y ~~ m/ || $x /
False
> say $y …Run Code Online (Sandbox Code Playgroud)