使用正则表达式替换QueryString值

时间:2009-09-14 20:04:16

标签: c# regex string

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

http://www.url.com/page.aspx?id=1

我想写一个函数,我传入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);
}

2 个答案:

答案 0 :(得分:10)

这是一个可以完成工作的功能:

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

答案 1 :(得分:2)

使用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类可能更适合。其用途包含在URL split in C#?中。