【测试用例】:
输入:01@02正则表达式:(.+)@(.+)替换值:$21
【测试结果】:输出:$21
可以看到,如果在捕获组标记“$数字”(即上图的“$2”)后方直接跟上数字,会导致引用捕获组2(即上图的“$2”)失败,即直接输出了$21
【正确运行结果】:参考RegExr: 学习、构建 和 测试 正则表达式 Test RegEx
输出:021
这是正常现象。在 C# 的 Regex.Replace 中,替换字符串里的 $number 才会被视为捕获组引用,而当你写成 $21 时,正则引擎会优先将它解释为第 21 个捕获组,因为数字会被连续解析。
Regex.Replace
$number
$21
你的例子:
输入:01@02 正则:(.+)@(.+) 替换:$21
引擎会将 $21 解释为 第21组 → 发现没有 → 输出原样 $21,而不是 $2 + 1。
第21组
$2
1
你需要告诉正则引擎 $2 到此为止,再加上 1,常见做法:
$ {2}1 // 注意中间不能有空格
C# 替换字符串写成:
Regex.Replace(input, "(.+)@(.+)", "${2}1");
结果为:
021
经过测试,已正常运行。但是这个写法感觉似乎不同编程语言都有较大不同,并且${XX}通常是命名组的写法,$编号 后紧跟数字在某些正则测试网站的默认编程语言模式中是被支持的,建议C大您看一下是否在模块文档中写一下引用捕获组的用法即注意事项会好一些。
正则涉及相当多的知识,qk文档目前都没有包含这部分,也不太适合单独说这个。等以后如果加正则部分的文档再考虑了