用于捕获 Maven 测试输出的正则表达式

Regex to capture Maven test output

当我 运行 我的测试时,我有这个 Maven 输出:

...
[INFO] 
[ERROR] Tests run: 77, Failures: 0, Errors: 2, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  42:09 min
[INFO] Finished at: 2022-02-25T10:40:21Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test (default-test) on project ***-***-******-*****: There are test failures.
[ERROR]
...

我想用正则表达式或其他方式捕获这一行:

Tests run: 77, Failures: 0, Errors: 2, Skipped: 0

我不需要准确地捕捉它,但至少是一般区域,因为每个测试 class 都会生成自己的测试摘要 运行,通过等

到目前为止我想出的正则表达式是:

((?<=\[ERROR\]).*\n).*((?=BUILD).*\n)

由于某些原因它不起作用。

我该怎么做?

你可以使用

\[ERROR](.*)(?:\n(?!.* BUILD\b|\[ERROR]).*)*\n.* BUILD\b

在部分中,模式匹配:

  • \[ERROR\] 匹配 [ERROR]
  • (.*)捕获组1,匹配整行
  • (?:非捕获组
    • \n 匹配一个换行符
    • (?! 否定前瞻断言是正确的不是
      • .* BUILD\b 匹配 BUILD
      • |
      • \[ERROR] 匹配 [ERROR]
    • ) 关闭前瞻
    • .*匹配整行
  • )* 关闭非捕获组并可选择重复
  • \n.* BUILD\b 匹配一个换行符和 BUILD
  • 的行

Regex demo