Регулярное выражение (rexep) с группировкой для системы возвышенного текста 2 - PullRequest
1 голос
/ 11 января 2012

Я пытаюсь реализовать захват ошибок с помощью системы сборки Sublime Text 2 для препроцессора LESS в 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Регулярное выражение стиля для сбора до четырех полей информации об ошибках из вывода программы сборки, а именно: имя файла, номер строки, номер столбца и сообщение об ошибке.Используйте группы в шаблоне для сбора этой информации.Поле имени файла и поле номера строки являются обязательными.

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

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

1 Ответ

1 голос
/ 11 января 2012

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