【问题标题】:Jenkins regex for multiple words for negative patternJenkins正则表达式用于否定模式的多个单词
【发布时间】:2016-09-06 12:39:37
【问题描述】:

Jenkins 日志解析器插件在 jenkins 控制台中找到以下字符串时使作业不稳定

以下两个正则表达式来自一个文件。它告诉它是否找到“未知命令”或“警告”将它们视为警告。

warning /unknown command/
warning /(?i)\bwarning\b/i

如果我们在以下上下文中找到“未知命令”和警告,如何忽略。在组合中

[exec] ORA-0042: unknown command ")" - rest of line ignored.
[deployComposite] WARNING: Error in applying config plan: Namespace prefix 'ui' used but not declared.. Config plan was skipped.

请帮助两个不同的正则表达式。

还有我可以使用的正则表达式工具来获得帮助

提前致谢

【问题讨论】:

  • 那么,那些正则表达式不起作用?第二个应该写成warning /\bwarning\b/i我相信
  • 我目前拥有的前 2 个正则表达式也在考虑第 3 行和第 4 行。我想跳过/忽略的
  • 这是一个“可视化”正则表达式的好工具:jex.im/regulex/#!embed=false&flags=&re=%5E(a%7Cb)*%3F%24
  • 另一个测试你的正则表达式与一些文本:rubular.com

标签: regex shell jenkins sh jenkins-plugins


【解决方案1】:

要跨多行匹配,你需要

  • 查找字符串unknown command
  • 寻找正好一个之后的换行符\n,即跳到下一行
  • 当在下一行找到WARNING 时,使用否定的前瞻来拒绝匹配

正则表达式

.*unknown command[^\n]*\n(?![^\n]*WARNING)

这里有一些 Java 代码,包括您的示例输入以进行演示:

String value = "[exec] ORA-0042: unknown command \")\" - rest of line ignored.\n"
        + "[deployComposite] WARNING: Error in applying config plan: Namespace prefix "
        + "'ui' used but not declared.. Config plan was skipped.";
Pattern pattern = Pattern.compile(".*unknown command[^\n]*\n(?![^\n]*WARNING)");
Matcher matcher = pattern.matcher(value);
if (matcher.find()) {
    System.out.println("Matched: " + matcher.group(0));
} else {
    System.out.println("No match!");
}

这将输出:

No match!

例如,如果您现在将字符串 WARNING 更改为 DEBUG,输出将是:

Matched: [exec] ORA-0042: unknown command ")" - rest of line ignored.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多