正则表达式(正则表达式)与sublime text 2构建系统的分组

时间:2012-01-11 01:22:29

标签: regex less sublimetext

我正在尝试使用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样式的正则表达式从构建程序的输出中捕获最多四个错误信息字段,即:文件名,行号,列号和错误消息。使用模式中的组来捕获此信息。文件名字段和行号字段是必需的。

我最近才开始学习正则表达式,所以非常感谢任何帮助。同样,regexp应返回2个组项 - 带路径和行号的文件名。两者都存在于预处理器输出中。

谢谢, 斯蒂芬

1 个答案:

答案 0 :(得分: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);
?>

请注意,我已插入空捕获作为列号的占位符。如果带有'index'标签的值是列号,那么只需复制其他字段捕获并更改文本。

<强>输出

Array
(
    [0] => 
    [1] => D:\workflow\less-css\test\test.less
    [2] => 6
    [3] => 
    [4] => Syntax Error on line 6
)