2012-01-11 90 views
1

我试图在Windows上为LESS预处理器实现用Sublime Text 2构建系统的错误捕获。我需要一个包含路径和错误行号的文件名分组的正则表达式。用于崇高文本分组的正则表达式(rexep)2构建系统

预处理器输出如下:

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

我希望捕获不必在你desccribe顺序?这将捕获该消息,文件名和行号到缓冲器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 
) 
+0

它发生,我认为'index'可能是列数。希望你可以扩展正则表达式来包含这个字段,如果需要的话?除了标签文本外,每个字段的模式都是相同的。 – Borodin 2012-01-11 02:47:35

+0

不幸的是,订单很重要。我想我现在不得不放弃错误信息。文件路径和行号就足够了。另外,你能否告诉我如何正确地逃避这个表情?它被分配给配置变量,所以python的原始输出是不可能的。 – stefanlous 2012-01-11 11:04:03

+0

如果你的正则表达式的实现允许前瞻断言,那么这个'/(?=.*filename:\s+(.+?)\s*\n)(?=.*line:\s+(.+?)(#)(#)(#)(#)(#) \ s * \ n)(?=。*消息:\ s +(。+?)\ s * \ n)/ s'将以正确的顺序返回字段。加倍所有反斜杠就足以逃避表达。 – Borodin 2012-01-11 14:52:01