我想在一组匹配的关键字。关键字是在阵列@b。我无法做出区分大小写的匹配。我做了一些测试,下面的脚本是一个例子:
> my $line = "this is a test line";
this is a test line
> my @b = < tes lin > ;
[tes lin]
> my regex a { || @b };
regex a { || @b }
> say $line ~~ m:i/ <a> / # matching the first as expected
「tes」
a => 「tes」
> say $line ~~ m:i:g/ <a> / # matching both as expected
(「tes」
a => 「tes」 「lin」
a => 「lin」)
> my @b = < tes LIN > ;
[tes LIN]
> my regex a { || @b };
regex a { || @b }
> say $line ~~ m:i:g/ <a> / # should match both "tes" and "LIN" but skips "LIN"
(「tes」
a => 「tes」)
> my @b = < TES lin >
[TES lin]
> my regex a { || @b }
regex a { || @b }
> say $line ~~ m:i:g/ <a> / # expect to match both but skips "TES"
(「lin」
a => 「lin」)
此外,映射所有较低的情况下不工作:
> my @b = < TES lin >.lc
[tes lin]
> my regex a { || @b }
regex a { || @b }
> say $line ~~ m:i:g/ <a> /
()
我的问题是,如何不区分大小写处理时,正则表达式/子规则实际上是叫什么名字?
我试图把我副词一个正则表达式,但里面所产生的匹配是徒劳的:
> my regex a { :i || @b }
regex a { :i || @b }
> say $line ~~ m:i:g/ <a> /
(「」
a => 「」 「」
然后19线“A =>「」「」”
a => 「」)
非常感谢你 !!!
lisprog
这个问题有:
my regex a { || @b }
say $line ~~ m:i/ <a> /
是a
负责在@b
值匹配的正则表达式,并且不与:i
编译。
在Perl6正则表达式的代码,你不能改变一个正则表达式从那样的距离是如何工作的。
然后是另一个有问题的:
my regex a { :i || @b }
这实在是编译如下:
my regex a {
[ :i ]
||
[ @b ]
}
这是比赛ignorecase[nothing]
如果失败(不会失败)匹配@b
的一个值。
使用|| @…
的唯一原因是,它在定义它们的顺序@…
值相匹配。
> my @c = < abc abcd foo >;
> say 'abcd' ~~ / || @c /
「abc」
我认为,在大多数情况下,它实际上更好地工作,就让它是默认|
语义。
> my @c = < abc abcd foo >;
> say 'abcd' ~~ / | @c /
「abcd」
> say 'abcd' ~~ / @c /
「abcd」
所以,那么这将工作,你希望它的方式:
my regex a { :i @b }
也就是说<a>|<b>
将匹配任何一个具有最长的出发式。虽然<a>||<b>
将尝试<a>
第一,如果失败,它会尝试<b>
。
如果你真的想||
语义,任何一个会工作:
my regex a { || :i @b }
my regex a { :i [|| @b] }
以下没有||
语义。
事实上,||
没有做任何事情。
my regex a { || [:i @b] }
这是相同的,因为这些:
my regex a { | :i @b }
my regex a { :i @b }