是否可以使用正则表达式找到两个单词之间最后一次出现的匹配项?

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