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

问题描述

我有一个文本日志文件,如下所示:

    --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。

您可以匹配包含 Error 的块,同时断言最后没有以 --Start 开头的部分

^\h*--Start .*\R\h*--Error\R\h*--End\b.*$(?!\R\s*--Start\b)

说明

  • ^ 字符串开头
  • \h*--Start .*\R 匹配开头后跟换行符的行
  • \h*--Error\R 匹配带有 Error 后跟换行符的行
  • \h*--End\b.*$ 用 End 匹配行直到字符串结束
  • (?!\R\s*--Start\b) 否定前瞻,匹配换行符并断言后面没有以 --Start 开头的第一行

查看regex demo