首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于正则表达式的一段代码,哪位指点下。该如何处理

2012-05-27 
关于正则表达式的一段代码,哪位指点下。m_pattern是模式串m_str是待匹配的字串regex_t regexint errcoder

关于正则表达式的一段代码,哪位指点下。
m_pattern是模式串 
m_str是待匹配的字串 
  regex_t regex; 
  int errcode=regcomp(&regex,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,&regex,errbuf,sizeof(errbuf)); 
  cerr<<m_pattern<<":"<<errbuf<<endl; 
  return -1; 
  } 
  //执行匹配 
  int eflag=0; 
  errcode=regexec(&regex,m_str.c_str(),20,value,eflag); 
  if(0!=errcode) 
  { 
  regerror(errcode,&regex,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(&regex); 
  return 0; 
我找不到原因。哪位大神给指点下。

[解决办法]
模式串里面没加()?
[解决办法]
“不管匹配与否,value都会保存字符串各个域的值”
什么意思?
value是你传进去的,regexec很可能改变value数组里面的值;
value就交给了regexec函数,它怎么做是内部的事情了。

我确实没用过,但是猜测如此。

热点排行