gpt4 book ai didi

match - perl6 如何使用副词作为变量?

转载 作者:行者123 更新时间:2023-12-04 19:34:33 26 4
gpt4 key购买 nike

我正在尝试匹配区分大小写或不区分大小写的字符串。有没有办法让.match方法将副词作为变量?

my $aString = "foo bar baz";
my @anArray = <OO AR AZ>;
my $anAdverb = :i;
my $firstCheck = ($aString.match(/$anAdverb "@anArray[0]" /)).Bool;

使用 $anAdverb在正则表达式中不起作用。有解决办法吗?

最佳答案

在表达式上下文中(即在参数列表之外),: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/);

关于match - perl6 如何使用副词作为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41250965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com