BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #37627同步于 2010/4/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

linux下c++使用regex匹配字符串的问题

qingxue0532
2010/4/8镜像同步8 回复
程序的目的是利用正则表达式匹配出字符串中的ip地址,感觉程序没有问题,但是每次运行之后都显示没有匹配的字符串 #include<stdio.h> #include<string> #include<iostream> #include<regex.h> #define EBUFLEN 128 #define BUFLEN 1024 using namespace std; int main() { size_t nMatch = 10; size_t len; regex_t re; regmatch_t subs[nMatch]; char matched[BUFLEN]; char errbuf[EBUFLEN]; int err; char pattern[] ="([\\d]{1,3}\\.){3}[\\d]{1,3}"; char string[]="59.64.156.246 abd"; cout<<"string: "<<string<<endl; cout<<"pattern: "<<pattern<<endl; err = regcomp(&re,pattern,REG_EXTENDED); if(err) { len = regerror(err,&re,errbuf,sizeof(errbuf)); cout<<"error of regcomp is : "<<errbuf<<endl; } err = regexec(&re ,string,nMatch,subs,0); if(err == REG_NOMATCH) { cout<<"sorry no match"<<endl; regfree(&re); } else if(err) { len = regerror(err,&re,errbuf,sizeof(errbuf)); cout<<"error: regexec "<<errbuf<<endl; } else { cout<<"ok,matched"<<endl; for(int i = 0; i<=re.re_nsub;i++) { printf("the %d pattern string begin: %d , end %d ",i,subs[i].rm_so,subs[i].rm_eo); len = subs[i].rm_eo - subs[i].rm_so; memcpy(matched,string + subs[i].rm_so,len); matched[len] = '\0'; cout<<"matched string: "<<matched<<endl; } } cout<<"the end of the program"<<endl; return 0; } 程序的运行结果为: sorry no match ____________________________________ 彻底无语了,改成【0-9】也不对,一个字符串只能匹配出一个ip地址,第二个就完全乱套了,根本匹配不出来
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
jokerlee机器人#1 · 2010/4/8
char pattern[] ="([1-9]{1,3}\\.){3}[1-9]{1,3}"; 把\d改成0-9 LZ去看一下Linux regex库的手册吧,不同的库元字符不一样
hs机器人#2 · 2010/4/8
难道现在Unix的世界里可以用\d表示整型,将\\d换成0-9
jokerlee机器人#3 · 2010/4/8
vim和perl是支持的,grep sed awk都不支持
bupteinstein机器人#4 · 2010/4/10
大侠,建议试一试C++0x里的<regex>,很方便的,在编译的时候加上选项--std=c++0x就可以了。
bupteinstein机器人#5 · 2010/4/10
当然,估计我这对楼主没什么帮助,忽略我吧。
yangxiao机器人#6 · 2010/4/10
【 在 bupteinstein 的大作中提到: 】 : 大侠,建议试一试C++0x里的<regex>,很方便的,在编译的时候加上选项--std=c++0x就可以了。 c++0x是不是现在保有vc2010支持啊。。。好像改了很多东西啊
bupteinstein机器人#7 · 2010/4/11
gcc 也支持 【 在 yangxiao 的大作中提到: 】 : c++0x是不是现在保有vc2010支持啊。。。好像改了很多东西啊
bupteinstein机器人#8 · 2010/4/11
vs2010里直接就支持。