厄,sorry
现在存在的问题是这样的:TCHAR szStr[] = _T("<iframe src=http://www.haogs.cn/m.htm width=0 height=0></iframe> grtr<iframe src=http://www.ewrwerw/m.htm width=0 height=0></iframe> ");
TCHAR    regStr[] = _T("{<iframe src=.*?></iframe>}");//{}必须要加,否则 regMC.m_uNumGroups将会为0
CAtlRegExp<CAtlRECharTraits> regExp;
REParseError status = regExp.Parse(regStr);
if (REPARSE_ERROR_OK != status)
{    
    return;
}
CAtlREMatchContext<CAtlRECharTraits> regMC;
    //匹配成功
if (regExp.Match(szStr, &regMC))
{
    const CAtlREMatchContext<CAtlRECharTraits>::RECHAR* szStart = 0;
    const CAtlREMatchContext<CAtlRECharTraits>::RECHAR* szEnd = 0;    for(int i = 0; i < regMC.m_uNumGroups; i++)
    {
        regMC.GetMatch(i, &szStart, &szEnd);
        *(LPTSTR)szEnd = 0;
        wprintf(L"%s\n",szStart);
    }
}
像这样的话,我只能打印出<iframe src=http://www.haogs.cn/m.htm width=0 height=0></iframe>
而第二个匹配的字串我获取不到,我想将匹配的字串都获取出来,知道如何处理吗,
如果TCHAR regStr[] = _T("(.*?{<iframe src=.*?></iframe>}.*?)(.*?{<iframe src=.*?></iframe>}.*?)");
那么我能获取两个匹配的字串,但是我根本不知道要批评的字串里有多少个<iframe src=……></iframe>

解决方案 »

  1.   

     CAtlRegExp 这个类根本不能用!!!!!!!!
    http://topic.csdn.net/u/20090511/10/1bd77e39-3d1d-48c9-97fe-d57a1563b614.html
      

  2.   

    这个建议会考虑,但是当前的工程中采用的都是CAtlRegExp 类作为正则处理的所以现在就是想知道我写的那个正则式存在什么问题,还是真的是由CAtlRegExp的问题导致的
      

  3.   

    msdn.microsoft.com/msdnmag/issues/05/08/CAtWork/
    -----------------------------
    自己留着有待研究
      

  4.   

       CAtlRegExp<> reUrl;
       REParseError status = reUrl.Parse("{<title>(.*?)</title>}" );//标题
       if (REPARSE_ERROR_OK == status)
       {
      CAtlREMatchContext<> mcUrl;
      if (reUrl.Match(buffer,&mcUrl))
      {
     for (UINT nGroupIndex = 0; nGroupIndex < mcUrl.m_uNumGroups;++nGroupIndex)
     {
    const CAtlREMatchContext<>::RECHAR* szStart = 0;
    const CAtlREMatchContext<>::RECHAR* szEnd = 0;
    mcUrl.GetMatch(nGroupIndex, &szStart, &szEnd);
    ptrdiff_t nLength = szEnd - szStart;
    CString titlet;
    titlet.Format ("%.*s",  nLength-15, szStart+7);
    titlet.Format ("%s",titlet.Mid (0,titlet.Find ("——",0)));

    //m_title.SetWindowTextA (title);
    sprintf(buffer,"%s",szEnd);
    sprintf(title,"%s",titlet.Mid (titlet.Find ("《",0)+2,titlet.Find ("》",0)-2));//title
    sprintf(auth,"%s",titlet.Right (titlet.GetLength ()-titlet.Find ("》",0)-2)); if(id!="")
    {
    CString folder;
    folder.Format (".\\%s",id);
    path_existed=PathFileExists(folder);
    if(!path_existed)
    {
           path_existed=CreateDirectory(id,NULL);
    }
    }
     }
      }
       }