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+\.)+|)
之类的东西。
如何修改这个正则表达式:
(?: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+\.)+|)
之类的东西。