是否可以使用正则表达式找到两个单词之间最后一次出现的匹配项?
Is it possible to find a match on last occurence between two words with regex?
我有一个如下所示的文本日志文件:
--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
最后一个块是最后注册的事件。
有没有办法只在最后一个块中出现“错误”时才匹配正则表达式?
我尝试了 ((?=Start)(*.)(?=Error)(*.)(?=End))(?:.(?!\))
之类的方法,但没有用。我不是正则表达式专家。
我正在尝试在 PRTG 上使用它来监控服务。
非常感谢您的帮助,谢谢。
正在阅读此页面https://www.paessler.com/manuals/prtg/regular_expressions支持的正则表达式引擎是 PCRE。
您可以匹配包含错误的块,同时断言最后没有以 --Start
开头的部分
^\h*--Start .*\R\h*--Error\R\h*--End\b.*$(?!\R\s*--Start\b)
说明
^
字符串开头
\h*--Start .*\R
匹配开头为换行符的行
\h*--Error\R
匹配错误后跟换行符的行
\h*--End\b.*$
匹配有End的行,直到字符串结束
(?!\R\s*--Start\b)
否定前瞻,匹配换行符并断言后面没有以 --Start
开头的第一行
看到一个regex demo
我有一个如下所示的文本日志文件:
--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
最后一个块是最后注册的事件。 有没有办法只在最后一个块中出现“错误”时才匹配正则表达式?
我尝试了 ((?=Start)(*.)(?=Error)(*.)(?=End))(?:.(?!\))
之类的方法,但没有用。我不是正则表达式专家。
我正在尝试在 PRTG 上使用它来监控服务。
非常感谢您的帮助,谢谢。
正在阅读此页面https://www.paessler.com/manuals/prtg/regular_expressions支持的正则表达式引擎是 PCRE。
您可以匹配包含错误的块,同时断言最后没有以 --Start
^\h*--Start .*\R\h*--Error\R\h*--End\b.*$(?!\R\s*--Start\b)
说明
^
字符串开头\h*--Start .*\R
匹配开头为换行符的行\h*--Error\R
匹配错误后跟换行符的行\h*--End\b.*$
匹配有End的行,直到字符串结束(?!\R\s*--Start\b)
否定前瞻,匹配换行符并断言后面没有以--Start
开头的第一行
看到一个regex demo