关于正则表达式的一段代码,哪位指点下。
m_pattern是模式串
m_str是待匹配的字串
regex_t regex;
int errcode=regcomp(®ex,m_pattern.c_str(),REG_EXTENDED|REG_NOSUB);//编译正则表达式
char errbuf[128];
regmatch_t value[20];
memset(value,0,sizeof(regmatch_t)*20);
string field[20];
memset(field,0,sizeof(string)*20);
if(errcode!=0)
{
regerror(errcode,®ex,errbuf,sizeof(errbuf));
cerr<<m_pattern<<":"<<errbuf<<endl;
return -1;
}
//执行匹配
int eflag=0;
errcode=regexec(®ex,m_str.c_str(),20,value,eflag);
if(0!=errcode)
{
regerror(errcode,®ex,errbuf,sizeof(errbuf));
cerr<<m_pattern<<":"<<errbuf<<endl;
return -1;
}
else if(0==errcode)
{
cout<<"匹配成功."<<endl;//程序输出了这句话,表明匹配成功。
}
cout<<value[0].rm_so<<endl;//这里=0;
cout<<value[0].rm_eo<<endl;//这里也=0???
string all(m_str.c_str()+value[0].rm_so,m_str.c_str()+value[0].rm_eo);
cout<<"all=="<<all<<endl;//所以all输出=“”了。为什么呢? 不是应该输出m_str的吗?为啥会空呢?
regfree(®ex);
return 0;
我找不到原因。哪位大神给指点下。
[解决办法]
模式串里面没加()?
[解决办法]
“不管匹配与否,value都会保存字符串各个域的值”
什么意思?
value是你传进去的,regexec很可能改变value数组里面的值;
value就交给了regexec函数,它怎么做是内部的事情了。
我确实没用过,但是猜测如此。