在Perl中,如何将一个字符串与其他字符串列表进行匹配?

时间:2015-07-17 20:07:51

标签: perl string-matching

我想针对一小串字符串检查数组中的元素$columns[2]。我现在的方式是;

if (   $columns[2] eq 'string1' 
    || $columns[2] eq 'string2' 
    || $columns[2] eq 'string3' 
    || ...) { 
   ...
}

似乎必须有比所有OR更好的方法。

2 个答案:

答案 0 :(得分:6)

这正是grep的用途:

my $element_exists = 
   grep { $columns[2] eq $_ } qw(string1 string2 ... stringN);

另一种方法是使用first,它会在找到匹配后停止处理。这样,如果您首先匹配$columns[2]字符串,则不必比较剩余的n-1字符串:

use List::Util qw/first/;

my $element_exists = 
   defined first { $columns[2] eq $_ } qw(string1 string2 ... stringN);

你也可以any(正如@ThisSuitIsBlackNot在下面建议的那样),稍微不同的是首先返回匹配条件的元素的值,an​​y返回一个布尔值:

use List::Util qw/any/;

my $element_exists = 
   any { $columns[2] eq $_ } qw(string1 string2 ... stringN);

答案 1 :(得分:0)

您可以使用正则表达式。 if($ columns [2] =〜/ ^ $ string1 | $ string2 | $ string3 $ /

确保使用^和$确保$ string1,2或3不仅仅包含在$ columns [2]中。