hur.cn - 华软网

 热门搜索

CAtlRegExp正则如何获取所有匹配字串

  作者:未知    来源:网络    更新时间:2011/4/15
厄,sorry
现在存留的问题是这样的:
C++">
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>
---华软 网友回答---
 CAtlRegExp 这个类基本不能用!!!!!!!!


http://topic.csdn.net/u/20090511/10/1bd77e39-3d1d-48c9-97fe-d57a1563b614.html
---华软网友回复---
引用 1 楼 healer_kx 的回复:
 CAtlRegExp 这个类基本不能用!!!!!!!!


http://topic.csdn.net/u/20090511/10/1bd77e39-3d1d-48c9-97fe-d57a1563b614.html

这个建议会思量,然则当前的工程中采取的都是CAtlRegExp 类作为正则措置惩罚的

所以现在就是想知道我写的那个正则式存留什么问题,照旧真的是由CAtlRegExp的问题致使的
---华软网友回复---
msdn.microsoft.com/msdnmag/issues/05/08/CAtWork/
-----------------------------
自己留着有待研讨
---华软网友回复---
C++">		   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);
}
}
 }
  }
   }

---华软网友回复---
引用 4 楼 luciferstar 的回复:
C/C++ code
           CAtlRegExp<> reUrl;
           REParseError status = reUrl.Parse("{<title>(.*?)</title>}" );//题目
           if (REPARSE_ERROR_OK == status)
           {
              CAtlREMat……

擦,你这也只可找出一个匹配的字串出来吧,
如果有两个的话,你也只可找出一个      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。