我正在尝试使用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个组项 - 带路径和行号的文件名。两者都存在于预处理器输出中。
谢谢, 斯蒂芬
答案 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
)