match – perl6如何使用副词作为变量?
发布时间:2020-12-16 06:24:26 所属栏目:大数据 来源:网络整理
导读:我试图匹配一个区分大小写或不区分大小写的字符串.有没有办法让.match方法将副词作为变量? my $aString = "foo bar baz";my @anArray = OO AR AZ;my $anAdverb = :i;my $firstCheck = ($aString.match(/$anAdverb "@anArray[0]" /)).Bool; 在正则表达式中使
我试图匹配一个区分大小写或不区分大小写的字符串.有没有办法让.match方法将副词作为变量?
my $aString = "foo bar baz"; my @anArray = <OO AR AZ>; my $anAdverb = :i; my $firstCheck = ($aString.match(/$anAdverb "@anArray[0]" /)).Bool; 在正则表达式中使用$anAdver不起作用.有解决方法吗? 解决方法
在表达式上下文中(即在参数列表之外),:foo创建一个Pair对象.
然后可以使用|:将此对象作为副词插入到参数列表中: my $adverb = :g; say "a 1 b 2".match(/d/,|$adverb); 不幸的是,.match方法不支持:i副词. (可以说是疏忽 – 可能会打开一个Rakudo错误报告.) 我认为没有办法将副词插入到正则表达式中. 您可以将正则表达式存储为字符串,并使用< $foo>语法在运行时将其评估为两个不同的“包装”正则表达式之一(一个用于:i,一个没有): use MONKEY-SEE-NO-EVAL; my $string = "foo bar baz"; my @array = <OO AR AZ>; my $case-sensitive = True; my $regex = ' "@array[0]" '; say ?$string.match($case-sensitive ?? /:i <$regex>/ !! /<$regex>/); 但是,如果任何用户提供的数据在正则表达式中结束,则这是不安全的. 当然,如果整个正则表达式只匹配一个文字子字符串,则不需要eval,你可以安全地将子字符串插入到包装器正则表达式中,如下所示: my $string = "foo bar baz"; my @array = <OO AR AZ>; my $case-sensitive = True; my $substring = @array[0]; say ?$string.match($case-sensitive ?? /:i $substring/ !! /$substring/); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |