我正在为日志文件编写正则表达式来检测事件.我要做的是检测日志中是否出现“restart-required”这个短语,但棘手的部分是,我想忽略所有调试消息.不幸的是,日志没有以任何形式被删除,只是一起运行.
好消息是,我的所有调试消息都以’Debug:’开头,以’endmsg’结尾.
到目前为止我能够组合起来的是一个正则表达式来捕获我的所有调试短语.
/Debug:\s(.+?(?=endmsg))/gm
我在这里无法弄清楚的是如何扩展它来搜索“restart-required”这个短语,但如果它在其中一个捕获的调试消息中则忽略它.
我正在使用的正则表达式101 – https://regex101.com/r/zI1kM2/3
我不打算捕获短语或其周围的任何东西,但只是一个布尔值True / False来回答“在调试消息之外的日志中是否出现’需要重启’这一短语?”
谢谢!
解决方法
你可以使用的一个正则表达式是:Debug.*?endmsg |(restart-required).
这将首先匹配所有Debug语句,如果它不匹配,它将尝试匹配右侧的组(具有捕获组的组).处理匹配项时,查找是否有任何匹配项具有第一个捕获组.如果他们这样做,那么你可以返回true.
Regex101 Example – 比赛以绿色突出显示
有关这方面的更多信息,请阅读Rexegg的The Best Regex Trick.
编辑:看看this answer,我也遇到过一种方式,其中PCRE已经内置了这样的东西.它是(* SKIP)和(* F)(more information here).修改后的正则表达式将是:
?调试*(* SKIP)(* F)endmsg |重启所需
它不需要检查任何捕获组,并且具有所需的输出.如果与此正则表达式匹配,则返回true.