如何在perl中为特定模式grep两次?

时间:2014-01-17 05:48:45

标签: regex perl

我有一个模式, 就这样吧,

pppoe lg id 827 vlan-id 100 pppoe user@local local Jan 3 14:41:20

从此我想要模式'pppoe',并希望确保它出现两次。

pppoe lg id 827 vlan-id 100 pppo user@local local Jan 3 14:41:20

此处pppoe只出现一次,其他为pppo,这次不应该匹配。

3 个答案:

答案 0 :(得分:4)

一种直接的方法是将匹配放在一个数组中并检查项目数:

my $str = "pppoe lg id 827 vlan-id 100 pppoe user\@local local Jan 3 14:41:20";
my @count = $str =~ /pppoe/g;
if (scalar @count == 2) {
    print "MATCH exactly two times\n";
}

或者,正如mpapec所建议的那样:

print "MATCH\n" if scalar @{[ $str =~ /pppoe/g ]} == 2;

答案 1 :(得分:0)

您可以使用:

^((?!pppoe).)*(pppoe)((?!pppoe).)*\2((?!pppoe).)*$

参考 Demo

说明:

Explanation

答案 2 :(得分:0)

所有必要的是

if ($str =~ /pppoe.*pppoe/) {
  ...
}