Why is “$1” ending up in my Regex.Replace() result?

后端 未结 4 708
北恋
北恋 2021-01-17 22:10

I am trying to write a regular expression to rewrite URLs to point to a proxy server.

bodystring = Regex.Replace(bodystring, \"(src=\'/+)\", \"$1\" + proxySt         


        
4条回答
  •  礼貌的吻别
    2021-01-17 22:48

    When proxyStr = "10.15.15.15:8008/proxy?url=http://", the replacement string becomes "$110.15.15.15:8008/proxy?url=http://". It contains a reference to group number 110, which certainly does not exist.

    You need to make sure that your proxy string does not start in a digit. In your case you can do it by not capturing the last slash, and changing the replacement string to "$1/"+proxyStr, like this:

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

    Edit:

    Rawling pointed out that .NET's regexp library addresses this issue: you can enclose 1 in curly braces to avoid false aliasing, like this:

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

提交回复
热议问题