gpt4 book ai didi

regex - Regexp::Grammars 中不区分大小写的哈希键

转载 作者:行者123 更新时间:2023-12-02 05:38:01 26 4
gpt4 key购买 nike

在 Perl 模块 Regexp::Grammars 中,考虑以下标记:

<token: command>       <%commands>

此标记是复杂语法的一部分,可解析各种不同的句子。

此标记与哈希 %commands 中的任何单词匹配,我将其定义如下(当然,在任何函数之外):

our %commands = (
'Basic_import' => 1,
'Wait' => 1,
'Reload' => 1,
'Log' => 1,
);

这适用于匹配“Basic_import”、“Wait”等关键字。但是,我也希望它匹配“basic_import”、“wait”等单词。

如何使此哈希不区分大小写,而不必多次复制和粘贴每个关键字?因为这是复杂语法的一部分,所以我想使用 Regexp::Grammars,并且我不希望必须针对此特定异常恢复到 grep。

最佳答案

从文档来看,它听起来像 <%commands>将匹配WaitWaiting ,所以即使是 <%commands> 的不区分大小写的版本会不太理想。

您通常想要匹配通用标识符,并独立检查标识符是否是有效命令。这就是阻止printfoo();的原因相当于 print foo();在 Perl 中。

我可以提出以下建议:

use feature qw( fc );

our %commands = map { fc($_) => 1 } qw(
Basic_import
Wait
Reload
Log
);

<rule: command> (<ident>) <require: (?{ $commands{fc($CAPTURE)} })>

<token: ident> \w+

您可能可以使用 lc 来逃脱惩罚。而不是fc如果您想向后兼容 5.16 之前的 Perl 版本。

关于regex - Regexp::Grammars 中不区分大小写的哈希键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118046/

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