正则表达式匹配和删除URL中的参数

时间:2011-09-04 09:10:20

标签: c# asp.net regex

我有一个网址,如 localhost:8001 /?page = categories& catid = 4& p = 1888& country = 1,2,3,6 ,我想删除& p = 1888年有正则表达的部分。我怎样才能匹配&用asp.net c#?

排除这部分

修改 这是我为解决方案创建的功能:

public string RemoveUrlParameters(HttpContext Context, string[] Parameters)
{
    string result = String.Empty;

    UriBuilder urlBuilder = new UriBuilder(Context.Request.Url.AbsoluteUri);
    var values = HttpUtility.ParseQueryString(urlBuilder.Query);

    for (int i = 0; i < Parameters.Length; i++)
        values.Remove(Parameters[i]);

    urlBuilder.Query = values.ToString();
    result = urlBuilder.ToString();
    result = Context.Server.UrlDecode(
    result.Replace("http://" + Context.Request.Url.Authority, String.Empty)
    .Replace(":80", String.Empty).Replace("default.aspx", String.Empty));

    return result;
}

2 个答案:

答案 0 :(得分:9)

  

我想删除带有正则表达式的&amp; p = 1888部分

我建议你使用url解析器,以避免代码的脆弱性,并保证它对100%的任何有效url都有效,因为它们尊重RFC:

var url = "http://localhost:8001/?page=categories&catid=4&p=1888&country=1,2,3,6";
var urlBuilder = new UriBuilder(url);
var values = HttpUtility.ParseQueryString(urlBuilder.Query);
values.Remove("p");
urlBuilder.Query = values.ToString();
var newUrl = urlBuilder.ToString();

使用Regex实现有效的URL解析器可能非常具有挑战性并且不值得,尤其是当.NET框架已经为您提供操作URL的工具时。

答案 1 :(得分:0)

Regex.Replace(input, @"&p=1888(?=&|$)", string.Empty)