2011-08-04 18 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 –

関連する問題