Perl соответствует регулярному выражению для каждой строки / г не работает? - PullRequest
0 голосов
/ 06 января 2012

есть другая проблема с perl и regex, извините за то, что вы задира Perl Noobie; -)

Я получаю весь вывод программы через обратную галочку в переменной $ output.

Мое регулярное выражение всегда совпадает только с первым появлением на выходе, но не с каждым появлением.

/ г тоже не работает ..

$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 СегментMean 6 Вероятность: -8.360030637461975 SegmentMean 7 Вероятность: -8.163275211919945 SegmentMean 8 Вероятность: -7,917569593466525 СегментMean 9 Вероятность: -9.043243571260344

До SegmentMean 20 ..

Ответы [ 2 ]

4 голосов
/ 06 января 2012

Попробуйте просмотреть совпадения в виде массива (и используйте лучшее регулярное выражение):

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

Это должно сработать.

Вы даже можете превратить его в одну строку:

print "$1\n" while ($output =~ /SegmentMean \S+ Likelihood: ([-+]?\d+(?:\.\d+)?)/g);
1 голос
/ 06 января 2012

Вы печатаете только первый матч. $ 1 - первый матч.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...