请问正则替换是否支持\1\2?

使用问题 · 1370 次浏览
iamadsl 创建于 2021-12-19 12:25

查找:(小时|千米)(\d+)(\1)

替换:$2$3/$1

我试了一下不行,是我写的不对还是压根不支持?


回复内容
Cesar 2021-12-19 12:30
#1

应该是支持的,发一下调试运行的截图看看

iamadsl 2021-12-19 16:46 :

结果不变,如果把(\1)换成第一个括号的内容,就可以正常替换了

iamadsl 2021-12-19 16:47 :

我想要的结果应该是变成“5千米/小时”

Cesar 回复 iamadsl 2021-12-20 10:47 :
你这应该是正则写的有问题而不是因为支不支持$1
咿呀杀杀 2021-12-20 13:43
#2

肯定是支持的,问题出在你对 后向引用 的理解上。

(小时|千米)(\d+)(\1) (小时|千米)(\d+)(小时|千米)

你以为这两个正则是等价的,实际并不等价。 \1 引用的不是分组1的表达式,而是分组1的实际捕获内容。

(小时|千米)(\d+)(\1) 可以匹配 小时5小时 或者 千米5千米 ,但不能匹配 小时5千米

iamadsl 2021-12-20 15:11 :

原来如此,明白了,非常感谢~~所以,我实际想要的,实现重复引用第一组表达式的内容,还有别的方法能实现吗?这里没办法提前定义变量,只能完全靠正则写

咿呀杀杀 回复 iamadsl 2021-12-21 09:38 :

据我所知,木有~

iamadsl 回复 咿呀杀杀 2021-12-21 10:05 :

唉,好吧,谢谢了~

_听风_ 回复 iamadsl 2021-12-23 18:29 :

如果想要提前定义变量,可以写代码,也就是c#表达式. 使用regex.replace

回复主贴