PCRE:可选择在字符串中间最后一次出现字符后捕获

PCRE: Optionally capture after last occurrence of character in the middle of a string

如何修改这个正则表达式:

(?:code: |handler[ :]+(?:\w+?code: )?)(?<signature>.+?(?= :| and)).+?: (?<message>.+?(?= :| +>>>|$))

这样 iff​​ signature 组是堆栈跟踪; IE。点分隔路径,如 App.Parent.Child.Method;我只得到Method?目前,这个表达式对我的所有错误消息都非常有效,除了在这些堆栈跟踪情况下我不需要整个事情(我目前正在获取所有 App.Parent.Child.Method)。


我环顾四周,我看到的所有示例都依赖于以已知的起始字符串开始一个组,或者锚定到行的开头。但是,我的绳子在一根较长的绳子的中间,而且我也不总是知道它是由什么制成的,这些都不是一个真正的选择。我也不能使用任何代码,因为这是 运行 作为 Splunk 搜索查询/字段提取的一部分。

这是我试图从中获取的示例:

<<< WebContainer : [trace].WealthClientProfileService: Error code: TD.EBS.WCA.004.TEDS0001 : transaction failed. Error Level= 10  >>>

我只需要从“TD.EBS.WCA.004.TEDS0001”中捕获TEDS0001”。但是,由于我的一些错误消息如下所示:

<<< WebContainer : [trace].Handler: ::Error from ISM with ID: 20178 and message: Client Information Not Found  >>>

(在这种情况下我在整个“Error from ISM with ID: 20178”之后),我需要这个修改来只限制我的捕获组 iff​​ 它有 . 在里面。感觉很简单,就是做不出来

如果可以,

(specific match|.*) 将捕获 specific match,否则会退回到更通用的模式。我想你可以在命名组之前加上 (?:(?:\w+\.)+|) 之类的东西。