正则表达式解析url参数
解析url参数正则:(?<=\?|&)[\w\={}\\\\,-:'\s'""]*(?=[^#\s]|)
意思是(?<=\?|&) 从?或&符号开始匹配之后的满足 [\w\={}\\\\,-:'\s'""]*的字符串 但是不包含& 1个到多个 (?=[^#\s]|)匹配空格|#号之前或者空格之前结束
正好项目中要用到 捣鼓了好久还是不会.最终放弃使用split分割的方式解析发现好落伍
public static NameValueCollection QueryString(string path) { if (string.IsNullOrEmpty(path)) { return null; } var arr=path.Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries); if (arr.Length != 2) { return null; } var values = arr[1]; arr = values.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries); if (arr == null) return null; string[] itemvalues; NameValueCollection nvcs = new NameValueCollection(); foreach (var item in arr) { itemvalues = item.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); if (itemvalues == null || itemvalues.Length == 0) continue; nvcs.Add(itemvalues[0], itemvalues.Length <= 1 ? string.Empty : itemvalues[1]); } return nvcs; }
然后去看正则的文档 修改后版本
public static NameValueCollection QueryString(string path) { if (string.IsNullOrEmpty(path)) { return null; } path = System.Web.HttpUtility.UrlDecode(path); var m = Regex.Matches(path, @"(?<=\?|&)[\w\={}\\\\,-:'\s'""]*(?=[^#\s]|)", RegexOptions.None); if (m.Count <= 0) { return null; } NameValueCollection nvcs = new NameValueCollection(); string[] itemvalues = null; for (int i = 0; i < m.Count; i++) { itemvalues = m[i].Value.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); if (itemvalues == null || itemvalues.Length == 0) continue; nvcs.Add(itemvalues[0], itemvalues.Length <= 1 ? string.Empty : itemvalues[1]); } return nvcs; }
其实微软有封装好的方法 System.Web.HttpUtility.ParseQueryString 传入?号后面一部分就好了 有种有现成的不用 造轮子的感觉。 但是无所谓啦 当练习正则 还有自己的代码也好把控一点
推荐一篇不错的讲正则的文章http://www.oschina.net/question/12_9507
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!