返回信息流程序的目的是利用正则表达式匹配出字符串中的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地址,第二个就完全乱套了,根本匹配不出来
这是一条镜像帖。来源:北邮人论坛 / cpp / #37627同步于 2010/4/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
linux下c++使用regex匹配字符串的问题
qingxue0532
2010/4/8镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
char pattern[] ="([1-9]{1,3}\\.){3}[1-9]{1,3}";
把\d改成0-9
LZ去看一下Linux regex库的手册吧,不同的库元字符不一样
【 在 bupteinstein 的大作中提到: 】
: 大侠,建议试一试C++0x里的<regex>,很方便的,在编译的时候加上选项--std=c++0x就可以了。
c++0x是不是现在保有vc2010支持啊。。。好像改了很多东西啊