原文地址:https://www.cnblogs.com/pmars/archive/2012/10/24/2736831.html
工作需要用到C++中的正则表达式,所以就研究了以上三种正则。
1,C regex

/* write by xingming * time:2012年10月19日15:51:53 * for: test regex * */ #include #include #include #include #include #include using namespace std; const int times = 1000000; int main(int argc,char** argv) { char pattern[512]="finance\.sina\.cn|stock1\.sina\.cn|3g\.sina\.com\.cn.*(channel=finance|_finance$|ch=stock|/stock/)|dp.sina.cn/.*ch=9&"; const size_t nmatch = 10; regmatch_t pm[10]; int z ; regex_t reg; char lbuf[256]="set",rbuf[256]; char buf[3][256] = {"finance.sina.cn/google.com/baidu.com.google.sina.cndddddddddddddddddddddda.sdfasdfeoasdfnahsfonadsdf", "3g.com.sina.cn.google.com.dddddddddddddddddddddddddddddddddddddddddddddddddddddbaidu.com.sina.egooooooooo", "http://3g.sina.com.cn/google.baiduchannel=financegogo.sjdfaposif;lasdjf.asdofjas;dfjaiel.sdfaosidfj"}; printf("input strings:\n"); timeval end,start; gettimeofday(&start,NULL); regcomp(®,pattern,REG_EXTENDED|REG_NOSUB); for(int i = 0 ; i < times; ++i) { for(int j = 0 ; j < 3; ++j) { z = regexec(®,buf[j],nmatch,pm,REG_NOTBOL); /* if(z==REG_NOMATCH) printf("no match\n"); else printf("ok\n"); */ } } gettimeofday(&end,NULL); uint time = (end.tv_sec-start.tv_sec)*1000000 + end.tv_usec - start.tv_usec; cout>buf) { printf("*******\n%s\n********\n",buf.c_str()); if(buf == "quit") { printf("quit just now!\n"); break; } match_results result; printf("run compare now! '%s'\n", buf.c_str()); bool valid = regex_match(buf,result,pattern); printf("compare over now! '%s'\n", buf.c_str()); if(!valid) printf("no match!\n"); else printf("ok\n"); } return 0 ; }
C++这个真心不想多说它,测试过程中发现 字符匹配的时候 ‘a' 是可以匹配的,a+也是可以的,[[:w:]]也可以匹配任意字符,但[[:w:]]+就只能匹配一个字符,+号貌似不起作用了。所以后来就干脆放弃了这伟大的C++正则,如果有大牛知道这里面我错在哪里了,真心感谢你告诉我一下,谢谢。
3,boost regex

/* write by xingming * for:test boost regex * time:2012年10月23日11:35:33 * */ #include #include #include #include "boost/regex.hpp" using namespace std; using namespace boost; const int times = 10000000; int main() { regex pattern("finance\\.sina\\.cn|stock1\\.sina\\.cn|3g\\.sina\\.com\\.cn.*(channel=finance|_finance$|ch=stock|/stock/)|dp\\.s ina\\.cn/.*ch=9&"); cout关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录