Регулярное выражение (rexep) с группировкой для подвышенного текста 2 Система сборки

StackOverflow https://stackoverflow.com/questions/8812973

  •  26-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь реализовать захват ошибки с помощью Sublime Text 2 System System для менее предварительного процессора в Windows. Мне нужно одно регулярное выражение с группировкой для имени файла с номером линии ошибок.

Предварительный результат следующим:

ERR: 
  type: Parse
  message: Syntax Error on line 6
  index: 131
  filename: D:\workflow\less-css\test\test.less
  line: 6
  extract:   asd,},
[Finished]

Вот рекомендации по регулярному выражению для file_regex вариант:

В параметре File_Regex используется регулярное выражение в стиле Perl для сбора до четырех полей информации об ошибках с вывода программы сборки, а именно: имя файла, номер строки, номер столбца и сообщение об ошибке. Используйте группы в шаблоне, чтобы захватить эту информацию. Поле имя файла и поле номера строки требуются.

Я только недавно начал изучать регулярные выражения, поэтому любая помощь очень ценится. Опять же, Regexp должна вернуть 2 элемента группы - имя файла с помощью пути и номера строки. Оба присутствуют в допроцессорной выходе.

Спасибо, Стефан

Это было полезно?

Решение

Я надеюсь, что захваты не обязательно должны быть в том порядке, который вы опускаете? Это захватит сообщение, имя файла и номер строки в буфеты 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);
?>

Обратите внимание, что я вставил пустой захват в качестве заполнителя для номера столбца. Если значение с меткой «Индекс» является номером столбца, просто дублируйте другое поле, и измените текст.

ВЫХОД

Array
(
    [0] => 
    [1] => D:\workflow\less-css\test\test.less
    [2] => 6
    [3] => 
    [4] => Syntax Error on line 6
)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top