Надеюсь, снимки не должны быть в том порядке, в котором вы описали?Это захватит сообщение, имя файла и номер строки в буферы 1, 2 и 3.
/message:\s+(.+?)\s*\n.*filename:\s+(.+?)\s*\n.*line:\s+(.+?)\s*\n/s
Учитывая ваш пример ошибки выше, захваты будут
1: Syntax Error on line 6
2: D:\workflow\less-css\test\test.less
3: 6
В качестве альтернативы, используя lookaheadутверждения, следующий код PHP хранит вещи в правильном порядке
<?php
$err = '
ERR:
type: Parse
message: Syntax Error on line 6
index: 131
filename: D:\workflow\less-css\test\test.less
line: 6
extract: asd,},
';
$re = '/(?=.*filename:\s+(.+?)\s*\n)(?=.*line:\s+(.+?)\s*\n)()(?=.*message:\s+(.+?)\s*\n)/s';
preg_match($re, $err, $match);
print_r($match);
?>
Обратите внимание, что я вставил пустой захват в качестве заполнителя для номера столбца.Если значение с меткой «index» является номером столбца, просто скопируйте другое поле, захватывает и измените текст.
OUTPUT
Array
(
[0] =>
[1] => D:\workflow\less-css\test\test.less
[2] => 6
[3] =>
[4] => Syntax Error on line 6
)