【问题标题】:Build system regex captures构建系统正则表达式捕获
【发布时间】:2018-01-31 14:51:03
【问题描述】:

我正在尝试在 SublimeText3 中过滤我的构建系统的输出。

首先,谁能解释一下两者的区别:

"file_regex": "",
"line_regex": "",

我想从这个示例输出中捕获以下行:

Compile success 0 Errors 0 Warnings  Analysis time :  15.0 [ms]

.

VHDL/Verilog/EDIF/SystemC Simulator build 10.3.3558.6081 

(c) 1997-2016 Aldec, Inc. All rights reserved.

License Number 0

 Welcome to VSIMSA!
 This message was printed from `startup.do' macro file.

# creating library
alib work
ALIB: Library `work' attached.

Compile success 0 Errors 0 Warnings  Analysis time :  31.0 [ms]
Compile Package "BT601_cfg"
Compile success 0 Errors 0 Warnings  Analysis time :  15.0 [ms]
# starting simulation with tb_top as the top level module
# asim fpc_tb
# running the simulation
# run 1000us
echo hi
hi
quit

【问题讨论】:

  • 我的正则表达式是以下atm:^编译成功[0-9]+错误[0-9]+警告分析时间:[0-9]+\.[0-9]+[毫秒]

标签: regex build sublimetext3


【解决方案1】:

首先,谁能解释一下两者的区别:

"file_regex": "",
"line_regex": "",

file_regexsublime-build 系统中用于捕获警告、错误或该类型事物的位置,以允许您直接导航到生成消息的文件中的相关位置。

正则表达式应通过包含一到四个正则表达式捕获的任意位置来匹配此类行,这些正则表达式捕获捕获以下信息:

  1. 文件名
  2. 行号
  3. 列号
  4. 消息文本

捕获必须按此顺序出现,因此,例如,如果没有列号但有消息文本,则需要包含一个空的正则表达式捕获,以便消息文本上的捕获是第四个。

文件和行/列信息用于让Sublime直接打开文件并将光标定位在合适的位置。文件名可以是相对路径,在这种情况下,构建文件中设置为working_dir 的文件夹用于确定文件的实际位置。

如果您碰巧打开了相应的功能,消息的文本将用于附加到带有幻影的文件窗口的内联错误消息等内容。

line_regex 仅在您运行的工具在与包含错误的行不同的行上显示文件名的情况下才需要。

在这种情况下,您应该提供具有以下捕获的line_regex

  1. 行号
  2. 列号
  3. 消息文本

如果有一个 line_regex 集合并且它在一行上匹配,Sublime 将向后查看结果以找到与您提供的 file_regex 匹配的第一行,允许它选择文件的名称为好吧。

在设置构建系统时,有时通过从菜单中选择 View > Show Console 或按相关键打开 Sublime 控制台会很有帮助。

您可以从那里输入以下命令并按回车键:

sublime.log_result_regex(True)

这将使 Sublime 将其发现的内容记录到控制台,因此您可以查看事情是否按预期工作。

例如,给定这个例子:

int main(int argc, char const *argv[])
{
    printf("Hello, World!\n");
}

使用随附的 C++ Single File 构建系统构建会在控制台中生成以下输出:

Running g++ "/home/tmartin/test.c" -o "/home/tmartin/test"
found result file, line, col of [/home/tmartin/test.c], [3], [29] full path: /home/tmartin/test.c

可以在Official documentationUnofficial documentation 中找到有关此主题的更多信息(此处链接的是两个文档集的构建系统部分)。

我想从这个示例输出中捕获以下行:

Compile success 0 Errors 0 Warnings  Analysis time :  15.0 [ms]

由于这些正则表达式值用于捕获实际的错误和警告,因此捕获此特定行没有意义,因为它不允许您在任何地方导航。

【讨论】:

    【解决方案2】:

    对于您的正则表达式,您必须转义 \[ms\],否则这将意味着匹配 ms 的字符集。

    您的字符串中的 2 个位置(在 Warningstime : 之后)也有 2 个连续的空格,而不是 1。这些只能与 2 个空格匹配。

    您可以将您的正则表达式更新为:

    ^Compile success [0-9]+ Errors [0-9]+ Warnings Analysis time : [0-9]+\.[0-9]+ \[ms\]

    【讨论】:

    • 我读到了。我不明白如何从定义中使用它。我现在发现 sublimetext 需要 4 个匹配项:分别是文件名、错误行、错误列和错误消息。有时所有信息都在一行中,因此可以使用 file_regex。如果信息在多行中,则可以使用 line_regex 将此信息添加到 file_regex。
    • 好的,那么我将把它从我的答案中删除,只留下正则表达式部分。在this page 上,它声明正则表达式应该使用许多捕获的组。
    猜你喜欢
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多