是否有可能在最后一次出现时找到两个单词与regex之间的匹配项?
我有一个如下所示的文本日志文件:是否有可能在最后一次出现时找到两个单词与regex之间的匹配项?,regex,prtg,Regex,Prtg,我有一个如下所示的文本日志文件: --Start 10:00:00 --Success --End 10:01:02 --Start 10:02:32 --Success --End 10:02:40 --Start 10:02:00 --Error --End 10:02:05 最后一个块是最后一个注册的事件。 只有在最后一个块中出现“error”时,才有方法匹配正则表达式吗 我尝试了类似于((?=开始)(*
--Start 10:00:00
--Success
--End 10:01:02
--Start 10:02:32
--Success
--End 10:02:40
--Start 10:02:00
--Error
--End 10:02:05
最后一个块是最后一个注册的事件。
只有在最后一个块中出现“error”时,才有方法匹配正则表达式吗
我尝试了类似于((?=开始)(*)(?=错误)(*)(?=结束))(?:(?!\\)
的方法,但不起作用。我不是正则表达式专家
我试图在PRTG上使用它来监视服务
非常感谢您的帮助,谢谢。阅读本页,支持的正则表达式引擎是PCRE
您可以匹配包含错误的块,同时断言在末尾,后面没有以--Start
开头的部分
^\h*--Start.*\R\h*--Error\R\h*--End\b.*$(?!\R\s*--Start\b)
解释
字符串的开头^
将行与Start匹配,后跟换行符\h*--Start.*\R
将带有Error的行与换行符匹配\h*--Error\R
将行与End匹配,直到字符串结束\h*--End\b.*$
负向前看,匹配换行符并断言后面没有以(?!\R\s*--Start\b)
--Start开头的第一行
请参阅一个您可以尝试:
[\s\s]*(-Start.*\s+--Error\s+--End.*)
它不起作用,因为PRTG不支持您链接的手册页面上报告的正则表达式标志。_italic_PRTG支持形式为(?isgmxUJ)的正则表达式(regex)选项及其否定形式,例如(?-i)。PRTG不支持regex标志,例如/g(全局)、/s(单行)或/gs,如果您试图设置标志,则无法正确搜索目标字符串您的答案仍然非常有用:)@MMDevAdvantix您可以尝试(?m)
内联多行选项(?m)^\h*--Start.*\R\h*--Error\R\h*--End\b.*$(?!\R\s*--Start\b)
@MMDevAdvantix另一个选项可以是[\s\s]*(-Start.*\s+--Error\s+--End.*)(?![\s\s*--Start)
两个选项都不起作用,我还试图简化正则表达式,我将您的答案标记为有效,因为它无论如何都是有用的,而且问题似乎与PRTG的限制有关。我会联系他们的支持!非常感谢您的宝贵帮助:)