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

如何修改此正则表达式:

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

iff signature组就是堆栈跟踪;即点分隔路径,例如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  >>>

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

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

(在这种情况下,我位于整个“ Error from ISM with ID: 20178”之后),我需要进行此修改以仅限制其中包含.的捕获组 iff 。我觉得这很简单,但我无法理解。

shikabulu 回答:PCRE :(可选)在字符串中间最后一次出现字符后捕获

(specific match|.*)将捕获specific match,如果可能的话,否则将退回到更通用的模式。我想您可以在命名组之前放置(?:(?:\w+\.)+|)之类的内容。

本文链接:https://www.f2er.com/3093178.html

大家都在问