Regex Perl关键字解析

Regex Perl关键字解析,regex,perl,keyword-search,Regex,Perl,Keyword Search,我目前正在用perl编写一个脚本来解析perl模块并从中提取有意义的单词。(perl关键字除外) 我有一个拒绝列表数组,其中包含perl关键字。我使用它将有意义的单词从perl关键字中分离出来 my $pattern = join("|", @rejectionlist); foreach my $word (@words) { if (!($word =~ /^$pattern$/i)) { push @meaningfulwords, $word; }

我目前正在用perl编写一个脚本来解析perl模块并从中提取有意义的单词。(perl关键字除外)

我有一个拒绝列表数组,其中包含perl关键字。我使用它将有意义的单词从perl关键字中分离出来

my $pattern = join("|", @rejectionlist);
foreach my $word (@words) {
    if (!($word =~ /^$pattern$/i)) {
            push @meaningfulwords, $word;
    }
}

是否可以动态生成perl关键字(拒绝列表数组-通过使用任何例程)?

我建议您看看这个模块。它将所有保留的Perl标识符分类为十个不同的类别,并导出十个相应的名称数组,您可以根据需要使用它们


顺便说一下,你的正则表达式是错误的。你想要的是
/^(?:$pattern)$/

我建议你看看这个模块。它将所有保留的Perl标识符分类为十个不同的类别,并导出十个相应的名称数组,您可以根据需要使用它们


顺便说一下,你的正则表达式是错误的。您需要的是
/^(?:$pattern)$/

如果您真的想使用regex来完成这类任务,您应该先转义每个关键字,然后再将它们合并到列表中。在关键字开头插入
\Q
,在关键字结尾插入
\E

my $pattern = '(?:\Q' . join('\E|\Q', @rejectionlist) . '\E)';

若你们真的想使用正则表达式来完成这类任务,你们应该在把每个关键字合并到列表中之前对它们进行转义。在关键字开头插入
\Q
,在关键字结尾插入
\E

my $pattern = '(?:\Q' . join('\E|\Q', @rejectionlist) . '\E)';

或者:
my$pattern=join(“|”,map quotemeta,@rejectionlist)
@tobyink-是的,同样的东西,…但是我的解决方案快了一点,最好是:)或者:
my$pattern=join(“|”,map quotemeta,@rejectionlist)
@tobyink-是的,同样的东西,…但我的解决方案速度快了一点,它的内容更好:)