我在数组中有以下值:
test1|value1
test2|value2
test3|value3
代码:
if (grep(/test1|value1/, @array)) {
print "Found";
}
我希望上面的代码只找到" test1 | value1"的完全匹配但即使我跑了,它也会被发现:
if (grep(/test3|value4/, @array)) {
print "Found";
}
我在这里缺少什么?
答案 0 :(得分:5)
正则表达式中的管道|
被解释为or
。它记录在perlreref
。
| Matches either the subexpression preceding or following it
所以,如果你想匹配包含|
的单词,你需要在正则表达式中转义它。现在它是OK
,但有一个问题它也会匹配test1|value1someothervalue
或someothervaluetest1|value1
或someothervaluetest1|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/;
}