Jenkins控制台部分:什么Java正则表达式将在字符串ERROR上触发但不在字符串%% ERRORLEVEL %%上触发?

时间:2015-11-30 17:44:36

标签: java regex jenkins

我在Windows服务器上使用Jenkins控制台部分插件[1]。它非常适合在我的日志上创建一个漂亮的左导航栏。

积极地,我希望任何错误消息都能导致节标题,例如;

Assert-PathExstsNotTooLong : ERROR, The path does not exist: E:\P...
...
Oops! Error, please do not do that.

否定,我希望能够避免拼写出来的执行模板导致新的节标题,例如下面的内容。

[workspace] $ cmd.exe /C " c:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe /p:Configuration=Debug /p:VisualStudioVersion=12.0 "E:\Program Files (x86)\Jenkins\jobs\M.sln"

在SO [2]和你推荐的测试人员[3]上使用参考资料,我想出了以下内容,但是它没有用?

^(?=(.*([Ee][Rr][Rr][Oo][Rr] ).*))(?!(%%ERRORLEVEL%%))

使用Regex101的令人惊叹的测试仪,使用JS风格,我使用上面的输入并具有这些测试字符串和输出。第二行比赛信息可能解释了我的问题,但我不明白。

test-strings = 
help error you should see me
i am %%errorlevel%% again
i am not a section

match-info; 
1.  `help error you should see me`
2.  `error `

任何提示? 谢谢!

1. [];这个插件根据其文档使用Java Regex; ; ; ; X.Collapsing控制台部分插件 - Jenkins - Jenkins Wiki; ; https://wiki.jenkins-ci.org/display/JENKINS/Collapsing+Console+Sections+Plugin

2. [];一个关于字符的示例正则表达式,而不是字符串,以避免; ; ; ; X.java - 正则表达式包含和排除特殊字符 - Stack Overflow; ; Regular expression include and exclude special characters

3. []; ; ; ; ; X.Online正则表达式测试器和调试器:JavaScript,Python,PHP和PCRE; ; https://www.regex101.com/#javascript

1 个答案:

答案 0 :(得分:1)

(我无法添加评论,否则我会直接询问,但您拼写出来的消息模板示例并未包含文字%%ERRORLEVEL%%,但我认为它本来就是一个字符串,%%ERRORLEVEL%%位于其中间的某个地方。另外,由于这个例子并不恰当,我无法准确地说出你的意思。 #34;不工作")

您的问题是,您的正则表达式会在文本中的任何位置与ERROR_(带空格)匹配,除非文本正好 %%ERRORLEVEL%%。我认为相反,你可以写:

^(?=(.*([Ee][Rr][Rr][Oo][Rr])))(?!.*(%%ERRORLEVEL%%)).*
  • 你真的需要只匹配ERROR_(带空格)而不是ERROR(无论是否有空格)?如果是前者,那么您已经排除了%%ERRORLEVEL%%,并且可以使用.*(?i:ERROR ).*作为完整的正则表达式。
  • 折叠控制台部分插件使用Java regular expressions,因此您可以使用(?i:ERROR)来区分ERROR不区分大小写。
  • 您需要在.*的负前瞻原子之前和之后追加%%ERRORLEVEL%%,否则它只会排除完全匹配
  • 插件的文档没有说明模式是否必须完全匹配一行,或者它是否只匹配行内的文本。如果它与该行完全匹配,则前导^是不必要的,但不会造成任何伤害。
  • 您已在ERROR%%ERRORLEVEL%%周围捕获括号。如果你没有对该文本做任何事情,那么这些括号是不必要的。

以下正则表达式会匹配任意ERRORErrorerror等任意一行,除了%%ERRORLEVEL%%%%ErrorLevel%%之外的任何行,%%errorlevel%%等。

^(?=.*(?i:ERROR))(?!.*(?i:%%ERRORLEVEL%%)).*