perl匹配正则表达式每行/ g不起作用?

时间:2012-01-06 17:10:23

标签: regex perl

有perl和regex的另一个问题,对不起是一个坏人perl noobie; - )

我通过变量$ output中的反引号获得整个程序输出。

我的正则表达式总是匹配输出中出现的第一个,但不是每个外观都匹配..

/ g也不起作用..

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

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

Java输出的输出是:

SegmentMean 0可能性:-7.138117738068088 SegmentMean 1可能性:-11.508156736772925 SegmentMean 2可能性:-10.424706822552386 SegmentMean 3可能性:-9.560308776447586 SegmentMean 4可能性:-9.26826400149502 SegmentMean 5可能性:-9.524685714290996 SegmentMean 6可能性:-8.360030637461975 SegmentMean 7可能性:-8.163275211919945 SegmentMean 8可能性:-7.917569593466525 SegmentMean 9可能性:-9.043243571260344

最多SegmentMean 20 ..

2 个答案:

答案 0 :(得分: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 :(得分:1)

你只打印第一场比赛。 $ 1是第一场比赛。