正则表达式解析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 != )
{
return null;
}
var values = arr[];
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 == ) continue;
nvcs.Add(itemvalues[], itemvalues.Length <= ? string.Empty : itemvalues[]);
}
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 <= )
{
return null;
}
NameValueCollection nvcs = new NameValueCollection();
string[] itemvalues = null;
for (int i = ; i < m.Count; i++)
{
itemvalues = m[i].Value.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
if (itemvalues == null || itemvalues.Length == ) continue;
nvcs.Add(itemvalues[], itemvalues.Length <= ? string.Empty : itemvalues[]);
}
return nvcs;
}
其实微软有封装好的方法 System.Web.HttpUtility.ParseQueryString 传入?号后面一部分就好了 有种有现成的不用 造轮子的感觉。 但是无所谓啦 当练习正则 还有自己的代码也好把控一点
推荐一篇不错的讲正则的文章http://www.oschina.net/question/12_9507
正则表达式解析url参数的更多相关文章
- IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数
因为项目需要解析URL当中参数的部分,在网上搜索了一下都没有相关的资料. 然后就自己写了一个 其实我就是通过正则表达式来处理URL 进行解析的 好了直接上代码吧 也是非常的简单,大家拷贝过去就可以使用 ...
- jQuery 解析 url 参数
应用场景: 三毛:我现在拿到一个 url 地址(https://www.google.com/search?dcr=&ei=5C&q=param),我现在要获取 location.se ...
- JS解析URL参数为对象
曲不离口,拳不离手 JS小编程练习之一:解析URL参数为对象 url:http://www.baidu.com/we/index.html?id=098&aaa=123&ccc=456 ...
- 正则表达式解析URL
正则表达式: var match = /^((ht|f)tps?:)\/\/([\w-]+(\.[\w-]+)*\/){1}(([\w-]+(\.[\w-]+)*\/?)*)?(\?([\w\-\., ...
- 解析URL参数
1.拿到一个完整url后,如何解析该url得到里面的参数. /** * 解析url中参数信息,返回参数数组 */ function convertUrlQuery($query) { $queryPa ...
- js解析url参数
1.采用正则,这也是现在使用最为方便的 function getQueryString(name) { const reg = new RegExp("(^|&)" + n ...
- 正则表达式获取URL参数
使用到的正则表达式: [^\?&]?参数名=[^&]+ document.location.getURLPara = function (name) { var reg = new R ...
- 一个解析url参数方法
function getRequestParameter(a) { var b = document.location.search || document.location.hash; if (a ...
- js解析url参数如http://www.taobao.com/index.php?key0=21&key1=你哈&(获取key0和key1的值)
function parseQueryString(url) { var pos; var obj = {}; if ((pos = url.indexOf("?")) != -1 ...
随机推荐
- xp
微软MSDN Windows XP Professional下载 Windows XP Professional 简体中文 (最原始版本,无SP)[505.63MB] 文件名:CN_WINXP_PRO ...
- WebForm(二)——控件和数据库连接方式
一.简单控件 1.Label(作用:显示文字) Web中: <asp:Label ID="Label1" runat="server" Text=&quo ...
- 【hive】——Hive sql语法详解
Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...
- Linux 如何实现 VLAN - 每天5分钟玩转 OpenStack(12)
LAN 表示 Local Area Network,本地局域网,通常使用 Hub 和 Switch 来连接 LAN 中的计算机.一般来说,两台计算机连入同一个 Hub 或者 Switch 时,它们就在 ...
- android 关闭/开启软件键盘(hideSoftKeyboard)
/** * 隐藏软键盘 * @param v */ public static void hideSoftKeyboard(View v) { InputMethodManager imm = (In ...
- 去掉windows8.1鸡肋的开始按钮
无开始按钮了,win8.1的 开始按钮反而非常鸡肋.. 可以使用我分享的链接下载startisgone: http://download.csdn.net/detail/wangallan/89728 ...
- Utils
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections.CollectionUtils ...
- python_爬虫一之爬取糗事百科上的段子
目标 抓取糗事百科上的段子 实现每按一次回车显示一个段子 输入想要看的页数,按 'Q' 或者 'q' 退出 实现思路 目标网址:糗事百科 使用requests抓取页面 requests官方教程 使用 ...
- kettle启动“Error: could not create the Java Virtual Machine”
因为我的操作系统是32bit,而Ketttle的Spoon脚本中,默认是PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m&qu ...
- sql总结(3)---比较全
一.交叉连接(CROSS JOIN) 交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的. 语句1:隐 ...