用硬编码文本

时间:2015-07-31 16:00:37

标签: regex splunk regex-group

首先,我不确定这是否是您在正则表达式中甚至可以做的事情。如果可以,我不知道如何搜索如何做到这一点。

我们说我有文字:

Click <a href="/follow">this link</a> for more information.

正则表达式:

<a[^>]*>([^<]*)</a>

正则表达式的应用将为组1产生这个:

this link

让我们说我想写正则表达式而不是返回第1组的硬编码文本

<a[^>]*>(${{replacement text}}[^<]*)</a>

这是按照的方式编写语法)

因此,将正则表达式应用于文本将为组1产生此结果:

replacement text

这可能吗?

这是另一个巩固我的目标的例子:

文字示例:

serverNode1/appPortal
serverNode1/appPortal2
serverNode1/appPortal3

我的正则表达式

appPortal((?:?{{"1"}}\b)|(?:\d))

使用相同的语法

第一个字符组的预期输出应为

1
2
3

(表达式的一点是匹配单词break并将其替换为&#34; 1&#34;或者使用数字字符类来匹配一个数字。子组是{{{ 1}}所以外部组仍然是组1)。

你可能会问这个问题的重点是什么?我使用Splunk进行字段提取,我希望将字段提取为1,2或3,就像我上面的示例一样,我只能依赖正则表达式组给我字段(因为,如果第1组==&#34;&#34;然后更改为&#34; 1&#34;),我不会在任何地方放置代码。

1 个答案:

答案 0 :(得分:2)

基本上,正如定义的正则表达式一样,这是不可能的。根据定义,正则表达式匹配文本中的模式。为了清楚起见,regexp引擎返回始终是原始字符串一部分的匹配项,仅此而已。有一些正则表达式扩展允许指定捕获组的名称,但它不会转换匹配。

您所描述的行为可以很容易地在任何编程语言中处理正则表达式匹配,但也可以通过组合正则表达式替换和解析来实现。

例如,s/appPortal(?!\d)/appPortal1/将取代&#34; appPortal&#34;使用&#34; appPortal1&#34;后面没有数字然后你可以应用另一个正则表达式来构建你想要的匹配。