gpt4 book ai didi

正则表达式匹配多行中最后一次出现的字符串

转载 作者:行者123 更新时间:2023-12-04 15:47:51 24 4
gpt4 key购买 nike

我正在尝试匹配日志文件中最后一次出现的字符串。

[03/03/2019 09:16:36] Moving message 123456789 from NEW to PENDING
[03/03/2019 09:16:36] Retrieving file(s) of type DATAWAREHOUSE for 123456
[03/03/2019 09:16:36] collecting warehouse version 7.3.1 files for 123456...
[03/03/2019 09:16:37] Moving message 123456789 from NEW to PENDING
[03/03/2019 09:16:37] Retrieving file(s) of type DATAWAREHOUSE for 123456
[03/03/2019 09:16:37] collecting warehouse version 7.3.1 files for 123456...
[03/03/2019 09:16:38] Moving message 123456789 from NEW to PENDING
[03/03/2019 09:16:39] Retrieving file(s) of type DATAWAREHOUSE for 123456
[03/03/2019 09:16:40] collecting warehouse version 7.3.1 files for 123456...

上面是示例日志文件,其中出现了 3 次以下字符串,

Moving message 123456789 from NEW to PENDING

我需要匹配最后一次出现以获取相应的时间戳“[03/03/2019 09:16:38]”。但是当所有这些都在一行中使用贪婪方法 (.*) 时,它工作正常。但是当它们出现在多行中时,它就不起作用了。我还没有尝试过 multiline (m),因为我不确定如何使用它。有人可以帮我构建正则表达式查询来检索最后一次出现的时间戳吗?示例:https://regex101.com/r/fnwPsB/1

最佳答案

这是一个不依赖于 PCRE 特性的解决方案,使用了负先行:

(?s)\[(\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2})\] Moving message 123456789 from NEW to PENDING(?!.* Moving message 123456789 from NEW to PENDING)

RegEx Demo

日期时间在第一个捕获组中可用。

这里 (?!.* Moving message 123456789 from NEW to PENDING) 是负先行,确保我们匹配给定模式的最后一次出现。

关于正则表达式匹配多行中最后一次出现的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com