C++ 正则获取url中参数

在访问网页过程中,为了识别所做操作或者访问对象的编号,大多是用Get方式进行提交网页。所以就有我们经常看到的url,比如http://longzhu.com/channels/speed?from=figameindex。

那么在url中的参数如何获取呢,在ASP.NET中是通过 Request["from"] 获取的,如果参数不存在或没有该参数,则返回null,如果存在就可以将返回结果转换成相应类型,然后进行相应处理。

作者最近在学习C++11中的正则表达式,所以想用C++中的正则,实现相应功能。下面贴上代码。

WebUrl类定义

 1 #ifndef WEB_URL_H_
 2 #define WEB_URL_H_
 3
 4 #include <regex>
 5 #include <string>
 6 using namespace std;
 7
 8 namespace crystal {
 9     class WebUrl {
10     public:
11         WebUrl(const string& url) : _url(url) {}
12         WebUrl(string&& url) : _url(move(url)) {}
13
14         string Request(const string& request) const;
15     private:
16         string _url;
17     };
18 }
19
20 #endif

WebUrl类实现

 1 #include "WebUrl.h"
 2
 3 namespace crystal {
 4     string WebUrl::Request(const string& request) const {
 5         smatch result;
 6         if (regex_search(_url.cbegin(), _url.cend(), result, regex(request + "=(.*?)&"))) {
 7             // 匹配具有多个参数的url
 8
 9             // *? 重复任意次,但尽可能少重复
10             return result[1];
11         } else if (regex_search(_url.cbegin(), _url.cend(), result, regex(request + "=(.*)"))) {
12             // 匹配只有一个参数的url
13
14             return result[1];
15         } else {
16             // 不含参数或制定参数不存在
17
18             return string();
19         }
20     }
21 }

测试代码

 1 #include <iostream>
 2 #include "WebUrl.h"
 3 using namespace std;
 4 using namespace crystal;
 5
 6 int main() {
 7     try {
 8         WebUrl web("www.123.com/index.aspx?catalog=sport&id=10&rank=20&hello=hello");
 9         cout << web.Request("catalog") << endl;
10         cout << web.Request("id") << endl;
11         cout << web.Request("rank") << endl;
12         cout << web.Request("hello") << endl;
13         cout << web.Request("world") << endl;
14     } catch (const regex_error& e) {
15         cout << e.code() << endl;
16         cout << e.what() << endl;
17     }
18
19     return 0;
20 }

参考:http://bbs.csdn.net/topics/320034235

转载请注明出处 http://www.cnblogs.com/wuhanqing/p/4575690.html

by crystal

时间: 2024-11-23 13:03:42

C++ 正则获取url中参数的相关文章

js的url中传递中文参数乱码,如何获取url中参数问题

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript”> function send(){ var url = "test01.html"; var userName = $("#userName").html(); window.open(encodeURI(url + "?userName="

js 获取URL中参数

function getQueryString() { var result = location.search.match(new RegExp("[\?\&][^\?\&]+=[^\?\&]+", "g")); if (result == null) { return ""; } for (var i = 0; i < result.length; i++) { result[i] = result[i].sub

获取URL中参数的值

function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null)return decodeURIComponent(r[2]); return null; }

Javascript RegExp对象---获取url中某一个参数的值

RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/attributes实例:window.location.href:http://localhost:8100/aspx/main/ServiceCenter_list.aspx?category_id=93&page=2要匹配到的category_id=93:/category_id=\d+/g 创建 RegExp 对象的语法: new RegExp(pattern, at

记录一次bug解决过程:velocity中获取url中的参数

一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-site request forgery,跨站请求伪造),在form表单提交中要加入$!csrfToken.ajaxUniqueToken 二.Bug描述:Velocity从URL中获取parameter参数 在项目IDCM中,使用webx容器进行项目的开发.前端的模板引擎采用了velocity,在项目

如何获取url中的参数并传递给iframe中的报表

在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数呢?以下用报表软件FineReport简单介绍一些. 具体实现过程 将报表生成页面时,给网页添加onload事件,首先获取url中的参数,然后嫁接到iframe的src上,或者通过获得的参数拼接处完整的报表url赋给iframe的src. <html> <head> <title

c#获取url中的查询字符串参数

/// <summary> /// 获取url中的查询字符串参数 /// </summary> public static NameValueCollection ExtractQueryParams(string url) { int startIndex = url.IndexOf("?"); NameValueCollection values = new NameValueCollection(); if (startIndex <= 0) ret

PHP用正则匹配获取URL中的域名

在PHP的官网上看到的parse_url()函数的替代方案.结果和parse_url()函数差不多,是使用正则实现的. URI 是 Web上可用的每种资源 - HTML文档.图像.视频片段.程序等 - 由一个通用资源标志符(Uniform Resource Identifier, 简称"URI")进行定位. 对象分组: ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9 测试代码如下:豪享

C#获取URL中的参数

//获取URL中id参数  var ids = YK.Common.Util.WebKit.QueryParamValue("ids", "");         /// <summary>         /// 获取url参数的字符串类型值         /// </summary>         /// <param name="key">参数名</param>         /// &