如何在perl中检查字符串中的多个子字符串

时间:2013-11-11 06:25:08

标签: perl

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

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中的新蜜蜂)

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

2 个答案:

答案 0 :(得分:0)

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

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

当然,这种情况可以缩短为:

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

答案 1 :(得分:0)

从我在这里做的很少,我说你可以这样做:

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

在上面的代码中我使用了一个先行断言。它的含义是匹配任何包含IDL和NORTHERN的行。