字符串函数(regex?)从url字符串中删除查询字符串对

时间:2012-01-09 18:46:34

标签: c# asp.net regex c#-4.0 .net-4.0

给出以下示例“字符串”:

  • SomePage.aspx页面ID = 20&安培;名称=布赖恩&安培;令牌= 1234
  • SomePage.aspx页面ID = 20&安培;令牌= 1234&安培;名称=布赖恩
  • SomePage.aspx页面标记= 1234&安培;?ID = 20&安培;名称=布赖恩

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

  • SomePage.aspx页面ID = 20&安培;名称=布赖恩
  • SomePage.aspx页面ID = 20&安培;名称=布赖恩
  • SomePage.aspx页面ID = 20&安培;名称=布赖恩

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

是否有单个正则表达式或字符串函数可以执行此操作?

3 个答案:

答案 0 :(得分:4)

我认为这会为你做(没有机会测试)。

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

编辑已更新,以正确处理令牌是第一对的情况。

答案 1 :(得分:2)

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

请参阅https://regexr.com/3ia6k

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

  • SomePage.aspx页面?令牌= 1234

<强>解释

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

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

  • SomePage.aspx页面ID = 20&安培;令牌= 1234&安培;名称=布赖恩
  • SomePage.aspx页面标记= 1234&安培;?ID = 20&安培;名称=布赖恩

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

...当token显示为最后一个参数和/或唯一参数及其前导?&时,会抓住{{1}}。 这部分处理以下情况:

  • SomePage.aspx页面ID = 20&安培;名称=布赖恩&安培;令牌= 1234
  • SomePage.aspx页面?令牌= 1234

答案 2 :(得分:2)

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

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