- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C中三种正则表达式比较
C++中三种正则表达式比较之后我变换了匹配的字符串,将其长度生了一倍,达到每个100字符左右(代码里面所示),匹配速度就下来了,但是也能达到 100w/s左右,这肯定满足我们现在的需求了。作者:pmars的博客来源:pmars的博客|2017-01-05 16:19?收藏??分享工作需要用到C++中的正则表达式,所以就研究了以上三种正则。1、C regex/* write by xingming * time:2012年10月19日15:51:53 * for: test regex * */#include regex.h#include iostream#include sys/types.h#include stdio.h#include cstring#include sys/time.husingnamespacestd;constint 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/)|/.*ch=9;constsize_t nmatch = 10;regmatch_t pm[10];int z ;regex_t reg;char lbuf[256]=set,rbuf[256];char buf[3][256] = {//dddddddddddddddddddddda.sdfasdfeoasdfnahsfonadsdf,3.sina.egooooooooo,http://3/google.baiduchannel=financegogo.sjdfaposif;lasdjf.asdofjas;dfjaiel.sdfaosidfj};printf(input strings:\n); timeval end,start; gettimeofday(start,NULL); regcomp(reg,pattern,REG_EXTENDED|REG_NOSUB);for(int i = 0 ; i times; ++i) {for(int j = 0 ; j 3; ++j) { z = regexec(reg,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;couttime/1000000 s and time%1000000 us.endl;return0 ;}使用正则表达式可简单的分成几步:1.编译正则表达式2.执行匹配3.释放内存首先,编译正则表达式int regcomp(regex_t *preg, const char *regex, int cflags);reqcomp()函数用于把正则表达式编译成某种格式,可以使后面的匹配更有效。preg: regex_t结构体用于存放编译后的正则表达式;regex:指向正则表达式指针;cflags:编译模式共有如下四种编译模式:REG_EXTENDED:使用功能更强大的扩展正则表达式REG_ICASE:忽略大小写REG_NOSUB:不用存储匹配后的结果REG_NEWLINE:识别换行符,这样‘$’就可以从行尾开始匹配,‘^’就可以从行的开头开始匹配。否则忽略换行符,把整个文本串当做一个字符串处理。其次,执行匹配int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);preg:已编译的正则表达式指针;string:目标字符串;nmatch:pmatch数组的长度;pmatch:结构体数组,存放匹配文本串的位置信息;eflags:匹配模式共两种匹配模式:REG_NOTBOL:The match-beginning-of-line operator always fails t
文档评论(0)