微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。