2012-01-06 5 views
0

perlとregexに別の問題があります。残念ですがperl noobieです.-)Perlはすべての行/正規表現にマッチしませんか?

変数$ outputの中にバックグラウンドで全体のプログラム出力があります。

私の正規表現は

/gはJava出力のいずれかから..

$output = `$calling 2>>bla.txt`; 

if ($output =~ m/SegmentMean .+ Likelihood: ([-+]?\d+\.?\d+)/g) { 
    print "$1\n"; 
} 

出力を動作しませんでした

...ちょうどすべての外観のための出力に表示されて最初ではないため、常に一致しています。

SegmentMean 0尤度:-7.138117738068088 SegmentMean 1尤:-11.508156736772925 SegmentMean 2尤:-10.424706822552386 SegmentMean 3尤度:-9.56 0308776447586 SegmentMean 4尤度:-9.26826400149502 SegmentMean 5尤:-9.524685714290996 SegmentMean 6尤:-8.360030637461975 SegmentMean 7尤:-8.163275211919945 SegmentMean 8尤:-7.917569593466525 SegmentMean 9尤度:SegmentMeanまで-9.043243571260344

20 ..

答えて

4

(より良い正規表現と使用)配列のように試合を経由してみてください。

while ($output =~ m/SegmentMean \S+ Likelihood: ([-+]?\d+(\.\d+)?)/g) { 
    print "$1\n"; 
} 

動作するはずです。

あなたも、一行にそれを回すことができます。

print "$1\n" while ($output =~ /SegmentMean \S+ Likelihood: ([-+]?\d+(?:\.\d+)?)/g); 
+1

私はそれは私はあなたのポストを編集し、[OK]願っています。私はPerlをまったく知らないので、私は私の答えを削除し、あなたのポストで正規表現を使用しました。 +1 :) –

+0

あなたのポストを見た前にティムとはいそれは私を助けた! = – Stefan

+1

for()(リストコンテキストのm // g)ではなく、while()(スカラーコンテキストではm // g)を使用する必要があります。 – tadmc

1

最初の試合のみを印刷しています。 $ 1が最初の試合です。

関連する問題