C# 使用正则表达式替换QueryString值

C# 使用正则表达式替换QueryString值,c#,regex,string,C#,Regex,String,在C#中,我尝试使用正则表达式替换查询字符串中的值。因此,如果我有: 我想编写一个函数,在其中传入url、querystring值和要替换的值。大致如下: string url = "http://www.url.com/page.aspx?id=1"; string newURL = ReplaceQueryStringValue(url, "id", "2"); private string ReplaceQueryStringValue(string url, string repla

在C#中,我尝试使用正则表达式替换查询字符串中的值。因此,如果我有:

我想编写一个函数,在其中传入url、querystring值和要替换的值。大致如下:

string url = "http://www.url.com/page.aspx?id=1";
string newURL = ReplaceQueryStringValue(url, "id", "2");

private string ReplaceQueryStringValue(string url, string replaceWhat, string replaceWith)
{
    return Regex.Replace(url, "[^?]+(?:\?"+replaceWhat+"=([^&]+).*)?",replaceWith);
}

使用String.Split最初将URL切割为页面和查询字符串部分可能更容易,然后再次使用Split.String将查询字符串切割为不同的部分

var urlSplit = url.Split('?');
var originalURL = urlSplit[0];

var urlRedefined = url;   
if(urlSplit.Length == 2)
{
  var queryString = urlSplit[1].Split('&');

  //your code here

  var urlRedefined = String.Format("{0}?{1}", 
    originalURL, 
    String.Join("&", queryString);
}

对于您的需要,正则表达式可能过于苛刻。而且,
System.Uri
类可能更适合。本节介绍了它的用法。

这里有一个函数可以完成这项工作:

static string replace(string url, string key, string value)
{
    return Regex.Replace(
        url, 
        @"([?&]" + key + ")=[^?&]+", 
        "$1=" + value);
}

我可能会用String.Split。为什么正则表达式会被过度使用?@unknown:我的意思是过度使用正则表达式模式是出了名的痛苦。您可能会在有限的测试中看到成功,但是一些小事情可能会使您的代码失效。我的回答并没有提供一种简单的方法来获取查询字符串的名称(例如,“Id”)并替换其值,因此也许另一种方法会更成功。@Andrew:看起来您是在替换键,而不是值。大卫:你确定吗?在我看来这是对的。括号里的可能是什么?or&并且regex中的键允许Andrew使用backreference$1将原始键包含在替换字符串中。旧值仅通过在替换字符串中包含新值而被丢弃。@brism-谢谢,这正是正在发生的事情@GordonG-我对编辑很好奇,你知道
string
string
在C#中是同义词吗?@brism,安德鲁:今天早些时候我可能已经疯了。我目前在这个答案中看到的是正确的。如果我在查询字符串中得到一个空值,那么&foo=这是否将无法匹配?