2014-01-17 23 views

回答

0

您可以使用:

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

參考Demo

說明:

Explanation

+0

-1:怎麼會這樣不匹配的三個或更多的'ppoe'串? *「確保它存在兩次」* – grebneke

+0

其實我試過這個代碼,它的工作。 /^(pppoe){2} $/ –

+2

@ user3205318我對此表示懷疑嗎? '/ ^(pppoe){2} $ /'匹配確切的字符串'pppoepppoe',沒有別的。 – grebneke

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; 
+0

你是不是指'/ \ bpppoe \ b/g'? – Kenosis

+2

@Kenosis不,不是嗎? OP沒有說它必須是一個單獨的詞,只是一個「模式」。 – grebneke

+0

還有[Goatse運營商](http://www.catonmat.net/blog/secret-perl-operators/#goatse),但對我來說,這是既模糊又可怕...... – grebneke

0

所有這一切需要的是

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