1

我正在尝试使用 Sublime Text 2 构建系统为 Windows 上的 LESS 预处理器实现错误捕获。我需要一个带有路径和错误行号的文件名分组的正则表达式。

预处理器输出如下:

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 个组项 - 带有路径和行号的文件名。两者都存在于预处理器输出中。

谢谢,斯特凡

4

1 回答 1

1

我希望捕获不必按照您描述的顺序?这会将消息、文件名和行号捕获到缓冲区 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

或者,使用前瞻断言,以下 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
)
于 2012-01-11T02:46:08.100 回答