给定以下示例"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 类会有所帮助。