字符串函数(正则表达式?)用于从 url 字符串中删除查询字符串对



给定以下示例"strings":

  • somePage.aspx?id=20&name=brian&token=1234
  • somePage.aspx?id=20&token=1234&name=brian
  • somePage.aspx?token=1234&id=20&name=brian

我想在所有情况下都删除令牌的名称/值对,所以我只剩下:

  • somePage.aspx?id=20&name=Brian
  • somePage.aspx?id=20&name=Brian
  • somePage.aspx?id=20&name=Brian

注意:由于各种原因,我无法使用 Uri 类。

是否有一个正则表达式或字符串函数可以做到这一点?

我认为

这会为您完成(没有机会进行测试(。

string s = "somePage.aspx?id=20&name=brian&token=1234";
s = Regex.Replace(s, @"(&token=[^&s]+|token=[^&s]+&?)", "");

编辑:更新以正确处理令牌为第一对的情况。

(btoken=[^&]*&|[?&]token=[^&]*$)

见 https://regexr.com/3ia6k

此正则表达式删除了所有变体中的token参数,包括 token 是唯一参数的变体:

  • somePage.aspx?token=1234

解释:

第 1 部分:btoken=[^&]*&

。捕获token,包括其值和终止&
本部分处理以下情况:

  • somePage.aspx?id=20&token=1234&name=brian
  • somePage.aspx?token=1234&id=20&name=brian

第 2 部分:[?&]token=[^&]*$

。当token作为最后一个参数和/或唯一参数及其前导?&出现时捕获。
本部分处理以下情况:

  • somePage.aspx?id=20&name=brian&token=1234
  • somePage.aspx?token=1234

考虑使用 HttpUtility.ParseQueryString ( http://msdn.microsoft.com/en-us/library/ms150046.aspx ( 来解析和 UriBuilder 来构造回来...

小心查询字符串中参数的所有编码和排序 - Uri 类会有所帮助。

最新更新