Perl grep数组中的确切值

时间:2016-05-04 09:11:46

标签: perl

我在数组中有以下值:

test1|value1
test2|value2
test3|value3

代码:

if (grep(/test1|value1/, @array)) {
    print "Found";
}

我希望上面的代码只找到" test1 | value1"的完全匹配但即使我跑了,它也会被发现:

if (grep(/test3|value4/, @array)) {
    print "Found";
}

我在这里缺少什么?

2 个答案:

答案 0 :(得分:5)

正则表达式中的管道|被解释为or。它记录在perlreref

  

| Matches either the subexpression preceding or following it

所以,如果你想匹配包含|的单词,你需要在正则表达式中转义它。现在它是OK,但有一个问题它也会匹配test1|value1someothervaluesomeothervaluetest1|value1someothervaluetest1|value1someothervalue等。

但是,你说你需要完全匹配test1|value1。因此,再次从perlreref开始,您需要在正则表达式之前和之后锚定^和美元$

 ^       Matches at the beginning of the string (or line, if /m is used)
 $       Matches at the end of the string (or line, if /m is used)

所以,它将成为:

if (grep(/^test1\|value1$/, @array)) {
    print "Found\n";
  }

答案 1 :(得分:1)

无需使用grep

use feature qw(say);

my @array = qw(test1|value1
               test2|value2
               test3|value3);

foreach(@array){
       say "Found" if /test1\|value1/;
}