繁体   English   中英

Perl next if regex 存储在数组中

[英]Perl next if regex stored in array

我有一段带有 while 循环的代码和几个 next if 在循环中是这样的:

LOOP:
while (something) {
   next if $UPUPRF =~ /^T[0-9]{6}/;
   next if $UPUPRF =~ /^SECURITE.*/;
   next if $UPUPRF =~ /^AUDIT[A-Z]{2}/;
}

我想将这些正则表达式放在我的配置文件(perl 数据结构)中,而不是将它们“硬编码”在脚本中,以便用户只需编辑配置文件即可轻松编辑它们,并希望您对此提出建议.

这样做最干净的方法是什么?

首先,我想我可以在配置文件中存储这样的正则表达式吗? (使用qr//):

 ....
 exclude_acct => [
                    qr/^T[0-9]{6}/,
                    qr/^AUDIT[A-Z]{2}/,
                    qr/^SECURITE.*/,
                 ],
 ....

在我的循环中,我应该使用这样的东西吗?

foreach (@{ $myhash{exclude_acct} }) {
    next LOOP if $UPUPRF =~ /$_/;
}

谢谢你的建议。

问候

注意:我还没有尝试过这段代码,只是猜测我可以这样做,但我主要想知道这是否“干净”或者是否有更干净的方法来做到这一点

这很好,但是启动正则表达式引擎的成本相对较高,因此比从众多正则表达式中创建一个正则表达式要快。

# Once, before the loop.
my $pat = join "|", @{ $myhash{exclude_acct} };
my $re = qr/$pat/;

# In the loop.
next LOOP if $UPUPRF =~ $re;

不过,这可能会破坏反向引用( \\1 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM