我在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
答案 0 :(得分:1)
(我无法添加评论,否则我会直接询问,但您拼写出来的消息模板示例并未包含文字%%ERRORLEVEL%%
,但我认为它本来就是一个字符串,%%ERRORLEVEL%%
位于其中间的某个地方。另外,由于这个例子并不恰当,我无法准确地说出你的意思。 #34;不工作")
您的问题是,您的正则表达式会在文本中的任何位置与ERROR_
(带空格)匹配,除非文本正好 %%ERRORLEVEL%%
。我认为相反,你可以写:
^(?=(.*([Ee][Rr][Rr][Oo][Rr])))(?!.*(%%ERRORLEVEL%%)).*
ERROR_
(带空格)而不是ERROR
(无论是否有空格)?如果是前者,那么您已经排除了%%ERRORLEVEL%%
,并且可以使用.*(?i:ERROR ).*
作为完整的正则表达式。(?i:ERROR)
来区分ERROR
不区分大小写。.*
的负前瞻原子之前和之后追加%%ERRORLEVEL%%
,否则它只会排除完全匹配^
是不必要的,但不会造成任何伤害。ERROR
和%%ERRORLEVEL%%
周围捕获括号。如果你没有对该文本做任何事情,那么这些括号是不必要的。以下正则表达式会匹配任意ERROR
,Error
,error
等任意一行,除了%%ERRORLEVEL%%
,%%ErrorLevel%%
之外的任何行,%%errorlevel%%
等。
^(?=.*(?i:ERROR))(?!.*(?i:%%ERRORLEVEL%%)).*