用硬编码文本替换组的正则表达式

A regular expression that replaces a group with hard coded text

首先,我不确定这是否是您甚至可以在正则表达式中执行的操作。如果可以,我不知道如何搜索如何做。

假设我有文本:

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

还有一个正则表达式:

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

正则表达式的应用将为第 1 组产生此结果:

this link

假设我想将正则表达式写入第 1 组 return 硬编码文本

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

(顺便编造句法)

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

replacement text

这可能吗?

这是另一个例子来巩固我的 objective:

文本示例:

serverNode1/appPortal
serverNode1/appPortal2
serverNode1/appPortal3

我的正则表达式

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

(使用相同的语法)

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

1
2
3

(表达式的要点是匹配单词 break 并将其替换为“1”,或者使用数字字符 class 来匹配数字。子组可以通过 ?: 所以外面的组还是组1).

您可能会问这有什么意义?我正在使用 Splunk 进行字段提取,我希望将字段提取为 1、2 或 3,就像我上面的示例一样,我只能依靠正则表达式组来提供我的字段(例如,我没有任何地方可以放置代码来说明如果组 1 ==“”然后更改为“1”)。

基本上按照正则表达式的定义,是不可能的。根据定义,正则表达式匹配文本中的模式。需要明确的是,正则表达式引擎 returns 匹配始终是原始字符串的一部分,仅此而已。有一些正则表达式扩展允许指定捕获组的名称,但它不会转换匹配。

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

例如,s/appPortal(?!\d)/appPortal1/ 会将后面没有数字的 "appPortal" 替换为 "appPortal1",然后您可以应用另一个正则表达式来构建您想要的匹配项。