正则表达式替换URL中的页码

Soo*_*ead 0 c# regex asp.net url-parameters

我对正则表达式并不擅长,而且我无法找到适用的解决方案,所以在经过大量搜索之后,我仍然无法确定这一点.

我有一个带有可选page = 123参数的URL.url中也可以有其他可选的get参数,这些参数可以在page参数之前或之后发生.

我需要将该参数替换为page = - PLACEHOLDER--以便能够将其与我的分页功能一起使用.

如果页面参数没有出现在url中,我想按照之前描述的方式添加它.

我正在尝试为字符串编写一个扩展方法,但静态函数也同样好.

一点点的解释也会受到赞赏,因为它会给我一个很好的正则表达式的教训,并希望下次我不必问.

我也使用asp.net mvc-3但是出于兼容性原因,在mvc-s路由之前会发生复杂的重写,而我无法访问它.所以请不要建议我使用mvc-s路由,因为我不能.

And*_*tad 5

我建议跳过正则表达式并使用另一种方法:

  1. 从网址中提取查询字符串.
  2. HttpValueCollection使用查询字符串构建一个HttpUtility.ParseQueryString
  3. 替换集合中的page参数.
  4. 调用.ToString()集合,你会得到一个新的查询字符串.
  5. 使用原始减去旧查询字符串加上新查询字符串构造更改后的URL.

就像是:

public static string SetPageParameter(this string url, int pageNumber)
{
    var queryStartIndex = url.IndexOf("?") + 1;
    if (queryStartIndex == 0)
    {
        return string.Format("{0}?page={1}", url, pageNumber);
    }
    var oldQueryString = url.Substring(queryStartIndex);
    var queryParameters = HttpUtility.ParseQueryString(oldQueryString);
    queryParameters["page"] = pageNumber;
    return url.Substring(0, queryStartIndex) + queryParameters.ToString();
}
Run Code Online (Sandbox Code Playgroud)

我没有证实这个编译,但它应该给你一个想法.