ai didi

c# - 为什么 "$1"出现在我的 Regex.Replace() 结果中?

转载 作者:太空狗 更新时间:2023-10-29 18:16:42 24 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式来重写 URL 以指向代理服务器。

bodystring = Regex.Replace(bodystring, "(src='/+)", "$1" + proxyStr);

这个表达式的想法非常简单,基本上是找到“src='/”或“src='//”的实例并在该点插入一个 PROXY url。这通常有效,但偶尔我会发现文字“$1”最终会出现在结果字符串中的情况。

这对我来说毫无意义,因为如果没有匹配项,那它为什么要替换任何东西呢?

不幸的是,我不能给出一个简单的例子,因为到目前为止它只发生在非常大的字符串上,但我想从概念上知道是什么让这种事情发生。

顺便说一句,我尝试使用正向回顾重写这个表达式,如下所示:

bodystring = Regex.Replace(bodystring, "(?<=src='/+)", proxyStr);

但如果输入字符串包含“src='//”,则输出中会出现两次 proxyStr TWICE。这对我来说也没有多大意义,因为我认为“src=”必须在输入中出现两次才能使 proxyStr 在输出中结束两次。

最佳答案

proxyStr = "10.15.15.15:8008/proxy?url=http://" 时,替换字符串变为 "$110.15.15.15:8008/proxy?url=http://”。它包含对组号 110 的引用,该组号肯定不存在。

您需要确保您的代理字符串不以数字开头。在您的情况下,您可以通过不捕获最后一个斜杠并将替换字符串更改为 "$1/"+proxyStr 来实现,如下所示:

bodystring = Regex.Replace(bodystring, "(src='/*)/", "$1/" + proxyStr);

编辑:

罗林 pointed out .NET 的正则表达式库解决了这个问题:您可以将 1 括在大括号中以避免错误别名,如下所示:

bodystring = Regex.Replace(bodystring, "(src='/+)", "${1}" + proxyStr);

关于c# - 为什么 "$1"出现在我的 Regex.Replace() 结果中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8432983/

24 4 0
文章推荐: c# - 不允许对 IsolatedStorageFileStream 进行操作。错误
文章推荐: angular - “无提供者”错误(即使我添加了提供者)
文章推荐: Angular 2 : Route redirect with AuthGuard
文章推荐: c# - 封一个类
太空狗
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com