0

我有一个输入文件,我正在读入一个哈希表,输入文件如下

MANAGEMENT=IDL
NORTH=IDL,NORTHERN||VIDL,NORTH||IDL,NORTH
SOUTH=IDL,SOUTHERN||CIDL,SOUTH

现在对于每个键,我必须检查另一个字符串是否说实例(这也是一个字符串)包含值,即 NORTH

Condition= TRUE if 
$instance contains (IDL AND NORTHERN) OR (VIDL AND NORTH) OR (IDL AND NORTH)

请注意,Value 可以有许多这样的 OR 条件

我有这样的 15000 个实例,我必须比较每个值,所以需要一个快速的方法。

我正在考虑将值传递给一个函数,该函数将返回一个正则表达式,我可以检查它但无法想到任何这样的(我是 perl 中的新蜜蜂)

感谢任何帮助或更好的建议

4

2 回答 2

0

也许您可以为索引构建多个哈希映射。也就是说,构建%IDL%NORTH%NORTHERN。在这些哈希映射中的每一个中,如果字符串包含适当的子字符串,则会出现一个字符串。这样,您对字符串的评估$s变为:

$IDL{$s} && $NORTHERN{$s} || $IDL{$s} && $NORTH{$s}

当然这个条件可以简化为:

$IDL{$s} && ($NORTHERN{$s} || $NORTH{$s})
于 2013-11-11T07:03:31.433 回答
0

从我这里开始的很少,我会说你可以这样做:

if ( $instance =~ /(?=.*idl)(?=.*north(?:ern)?/ ) {
    print "$instance\n";
}

在上面的代码中,我使用了前瞻断言。它的意思是匹配包含 IDL 和 NORTHERN 的任何行。

于 2013-11-11T07:19:21.687 回答