同一个函数调用两次,结果不正确,如果把函数复制一个,改一下函数名,在调用,结果是正确的。求解决办法

同一个函数调用两次,结果不正确,如果把函数复制一个,改一下函数名,在调用,结果是正确的。求解决方法。
我定义了一个正则函数,我会在过程调用两次,全是如果调用两次的话,结果是不正确的,如果把我函数复制一下,函数名子改一下,这样就可以了,结果就是正确的,函数是一样。

下面是调用的函数:
C/C++ code

CString AntBaiduDir(char *chArray,char *StrReg,CString & AntSum)
{
    
    //正则匹配
    char * text = chArray;
    CString str,RegStr;
    static CRegexpT <char> regexp(StrReg);
    MatchResult result = regexp.Match(text);

    while(result.IsMatched())
    {
        int sum=result.GetEnd() - result.GetStart();
        RegStr=text + result.GetStart();
        str=RegStr.Left(sum);
        AntSum+=str;
        result = regexp.Match(text, result.GetEnd());
    }
    return AntSum;
}



这里调用的地方:
C/C++ code

    //转换编码
    CString m_str2_,test1;
    GetDlgItem(IDC_EDIT1)->GetWindowText(m_str2_);

    //第一次正则匹配
    CString AntSum;
    char *StrReg1="path(.*?)ifhassubdir";
    AntBaiduDir(CharCov(m_str2_),StrReg1,AntSum);   //第一次调用

    char *StrReg2="path\\\\\":\\\\\"(\\d+:/[^\\\\]*?)\\";
    AntBaiduDir(CharCov(AntSum),StrReg2,test1);        //第二次调用
    m_str2.SetWindowText(test1);



奇怪的问题是如果我把函数复制一下,把函数名称修改一下,在调用就是正确的。
下面是显示结果正确的:

C/C++ code

CString AntBaiduDir(char *chArray,char *StrReg,CString & AntSum)
{
    //正则匹配
    char * text = chArray;
    CString str,RegStr;
    static CRegexpT <char> regexp(StrReg);
    MatchResult result = regexp.Match(text);

    while(result.IsMatched())
    {
        int sum=result.GetEnd() - result.GetStart();
        RegStr=text + result.GetStart();
        str=RegStr.Left(sum);

        AntSum+=str;
        //    str.Replace("filename=","");
        result = regexp.Match(text, result.GetEnd());
    }

    return AntSum;    
}



C/C++ code

CString AntBaidu(char *chArray,char *StrReg,CString & AntSum)
{
    
    //正则匹配
    char * text = chArray;
    CString str,RegStr;
    static CRegexpT <char> regexp(StrReg);
    MatchResult result = regexp.Match(text);

    while(result.IsMatched())
    {
        int sum=result.GetEnd() - result.GetStart();
        RegStr=text + result.GetStart();
        str=RegStr.Left(sum);
        AntSum+=str;
        result = regexp.Match(text, result.GetEnd());
    }

    return AntSum;
    
}



C/C++ code

    //转换编码
    CString m_str2_,test1;
    GetDlgItem(IDC_EDIT1)->GetWindowText(m_str2_);

    //第一次正则匹配
    CString AntSum;
    char *StrReg1="path(.*?)ifhassubdir";
    AntBaiduDir(CharCov(m_str2_),StrReg1,AntSum);   //第一次调用  

    char *StrReg2="path\\\\\":\\\\\"(\\d+:/[^\\\\]*?)\\";
    AntBaidu(CharCov(AntSum),StrReg2,test1);        //第二次调用
    m_str2.SetWindowText(test1);





求解决方法。

------解决方案--------------------
static CRegexpT <char> regexp(StrReg);
应该是这句的差距,两次调用同一个函数,如果函数体类有 static变量的话,这个变量只是在第一次调用的时候才会被初始化,当你第一次调用完成后,如果regexp静态对象的数据没有被正确的清除,就可能对第二次调用产生影响
你下面的调用同一个函数实现,但是不同的函数名,就是两个不同的static CRegexpT <char> regexp(StrReg);
两次调用不会相互影响,所以你的结果正确
 这个也验证了是regexp静态对象的影响出现了你说的问题