要分析的字符串形如:
<aaa>属性</a>
要捕获的字符串:
“<aaa>属性”
但有时候,原字符串有的是这样的:
<aaa><bbb><ccc>属性</a>
怎么能够这两种情况都存在的情况下,从中捕获“<aaa>属性”

解决方案 »

  1.   

    不知道你有没有用:
    说明:
    参数:
     strToken:搜索表达式,其中 '*'、'?'为统配符,均表示0个或者以上的字符,不同的是,'*'所表示的字符串将不被处理,'?'所表示的字符串将被返回;strSource:欲搜索的文本iStartPos:搜索开始位置(文本)返回:从iStartPos起第一个'?'所表示的字符串
    注:通配符不能连在一起,如“*?”将导致不可预测错误例如:
    1、strResult=Token3("<aaa>?</a>","<aaa>属性</a>",0);
       结果 strResult="属性"
    2、strResult=Token3("<aaa>*c>?</a>","<aaa><bbb><ccc>属性</a>",0);
       结果 strResult="属性"我现在在研究HTML解析,希望能够跟楼主切磋。
    mail:[email protected]
    我还在完善这个函数,但有点山穷水尽了,似乎只能用有限自动机来完成这种功能了。CString Token3(CString strToken, CString strSource, int &iStartPos)
    {
    CString strResult;
    CString strTemp;
    int iSourceLen,iTokenLen;
    int i,j;
    int iStatus;
    int iSaveJ;
    int iOldStatus; iSourceLen=strSource.GetLength();
    iTokenLen=strToken.GetLength(); j=0;
    iOldStatus=iStatus=2;
    for(i=iStartPos;i<iSourceLen && j<iTokenLen;)
    {
    switch(iStatus)
    {
    case 0: // '*' has inputted
    if(strSource[i]==strToken[j+1])
    {
    iOldStatus=0;
    iStatus=2;
    j++;
    }
    else
    i++;
    break;
    case 1: // '?' has inputted
    if(strSource[i]==strToken[j+1])
    {
    iOldStatus=1;
    iStatus=2;
    j++;
    }
    else
    strResult+=strSource[i++];
    break;
    case 2: // other
    iSaveJ=j==0?j:j-1;
    strTemp.Empty();
    while( i<iSourceLen && j<iTokenLen )
    {
    if(strToken[j]=='*')
    {
    iStatus=0;
    break;
    }
    if(strToken[j]=='?')
    {
    strResult+="\t";
    iStatus=1;
    break;
    }
    if(strSource[i++]==strToken[j])
    {
    strTemp+=strSource[i-1];
    j++;
    }
    else
    {
    strTemp+=strSource[i-1];
    j=iSaveJ;
    iStatus=iOldStatus;
    iOldStatus=2;
    if(iStatus==1)
    strResult+=strTemp;
    break;
    }
    }
    break;
    default:
    break;
    }
    }
    if(j<iTokenLen-1)
    strResult.Empty();
    iStartPos=i+1; return strResult;
    }
      

  2.   

    问题是光HTML中的A标记就有N中表达方式:
    <A HREF="http://www.csdn.net">CSDN</A>
    <A HREF=http://www.csdn.net>CSDN</A>
    <a href=http://www.csdn.net tager=_blank>csdn</a>
    <a href="http://www.csdn.net" tager="_blank">csdn</a>
    <a href=http://www.csdn.net tager=_blank style="font:宋体;font-size:9pt">csdn</a>
    ....
    总不至于在判断字符串属于哪一种情况吧?那我要分析HTML不是要累死
      

  3.   

    属性=<bbb><ccc>属性1 
    怎办?
    所以不太可能
      

  4.   

    怎么不可能,语法分析而已,有现成的spirit库
      

  5.   

    属性=<bbb><ccc>属性1 
    属性中有<>怎么办,至少的规定属性中没有某些字符