首页 > 解决方案 > 将捕获组命名为不同的名称

问题描述

我正在开发基于 Banzai Cloud ClusterFlow 的日志堆栈,我们有一个当前使用正则表达式解析并放置在特定名称中的日志;但是我们想弃用该名称并将其替换为新名称,假设该模式与以下模式类似:

^(?<someName>[^ ]*) (?<someNameWeWishToDeprecate>[^ ]*)$

假设我们收到一条日志行,例如

prop1 prop2

它将在我们解析的日志中产生两个属性:

someName=prop1
someNameWeWishToDeprecate=prop2

我们想要得到的是

someName=prop1
someNameWeWishToDeprecate=prop2
someNewFancyNae=prop2

如您所见,我们希望保留旧名称但也要使用新名称;这可以通过详细说明正则表达式来实现吗?

仅供参考:正则表达式引擎是基于 ruby​​ 的

标签: regexrubyfluentd

解决方案


您可以嵌套命名的捕获组并使用

^(?<someName>[^ ]*) (?<someNewFancyNae>(?<someNameWeWishToDeprecate>[^ ]*))$

或者,

^(?<someName>\S+)\s+(?<someNewFancyNae>(?<someNameWeWishToDeprecate>\S+))$

请参阅正则表达式演示

在此处输入图像描述


推荐阅读