2011-08-04 14 views
1
my @info = `net view printserver2`; 
foreach my $printer (@info) 
{ 
$printer =~ /.+\s+Print\s+\((.+)\)/; 
print "$1\n"; 

給我:Perl正則表達式在一些但不是全部記錄上丟失了尾部括號?

16-83 
16-84) HP DesignJet 755CM(C3198A 
16-84b 
16-85 
16-SW 
17-80 
18-45) HP DesignJet 250C (D/A1 
18-51) HP DesignJet 650C(C2859B 

這是原文:

(16-83) HP Designjet 800 42 by HP        
(16-84) HP DesignJet 755CM(C3198A)by HP       
(16-84b) HP LaserJet 5100 Series PCL6       
(16-85) HP Designjet T1100ps 44in HPGL2       
(16-SW) HP LaserJet 4100 Series PCL6       
(17-80) HP Color LaserJet 5500 PCL 6       
(18-45) HP DesignJet 250C (D/A1) by HP       
(18-51) HP DesignJet 650C(C2859B) by HP       

什麼是錯我的正則表達式?

這是我想要的結果:

16-83 
16-84 
16-84b 
16-85 
16-SW 
17-80 
18-45 
18-51 

回答

6

你的正則表達式是上線匹配到最後「)」。你需要指定一個非貪婪的匹配:

$printer =~ /.+\s+Print\s+\((.+?)\)/; 

+之後的問號意味着停下來的第一次機會。

,或者甚至更好,指定不 「)」 可以匹配:

$printer =~ /.+\s+Print\s+\(([^)]+)\)/; 
+0

不錯!非常棒!你搖滾! –

+0

http://i.stack.imgur.com/M3HwI.jpg –

相關問題