gpt4 book ai didi

regex - 在匹配中使用时如何使子规则/正则表达式不区分大小写?

转载 作者:行者123 更新时间:2023-12-04 14:53:55 25 4
gpt4 key购买 nike

我正在尝试匹配组中的任何关键字。关键字在数组@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> /
()
我的问题是,当实际调用正则表达式/子规则时,应该如何处理不区分大小写的问题?
我试图把 :i 副词放在正则表达式 a 中,但结果匹配是徒劳的:
> my regex a { :i || @b }
regex a { :i || @b }
> say $line ~~ m:i:g/ <a> /
(「」
a => 「」 「」
然后是 19 行“a => ★” ★”
 a => 「」)

最佳答案

问题在于:

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 }

关于regex - 在匹配中使用时如何使子规则/正则表达式不区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54625814/

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