C++ 为什么regex_match()和regex_search()不起作用?

C++ 为什么regex_match()和regex_search()不起作用?,c++,regex,C++,Regex,我的数据文件m;w、 t,w,t,w,t……,w,t就像: 5762;895360851.301667 5763;895360851.301667 83495;166360817.861111 1750401156;7597360815.8405566905363521.083889774363647.0447222077364348.66666 731583664434.3083333702364480.7269448965365022.0927781071365043.28333、82365

我的数据文件m;w、 t,w,t,w,t……,w,t就像:

5762;895360851.301667

5763;895360851.301667

83495;166360817.861111

1750401156;7597360815.8405566905363521.083889774363647.0447222077364348.66666 731583664434.3083333702364480.7269448965365022.0927781071365043.28333、82365544.150009170365607.33666746909365635.0577782165754.65000895366683.907500122366689.45000010571366967.13194414967707.580833179741.724167000

我想找出w,t对出现>=7次的行。我使用了以下代码:

ofstream MyTxtFile;
ifstream file("ipod-cascades.txt");
MyTxtFile.open("ipod-res.txt");
bool isWebId = true;
int n = 7,count=0;
string line;
string value;
smatch m;
while (getline(file, line)){
    if (std::regex_search(line,m, std::regex(";([^,]*,[^,]*,){7,}"))){
        
        count++;
        std::stringstream  linestream(line);
        std::string  tmp;


        if (getline(linestream, value, ';')){
        
            while (getline(linestream, tmp, ',')){

                if (isWebId){
                    MyTxtFile << value << "," << tmp;

                    isWebId = false;
                }
                else{
                    MyTxtFile << "," << tmp << endl;
                    isWebId = true;


                }
            }
        }
    }

    }
当我使用'regex_match'时,它找不到任何行,当我使用'regex_search'时,它找到一些行,然后给出stackoverflow异常。我的代码有什么问题? 顺便说一下,我使用的是VS2013。

std::regex\u match只有在整个字符串与模式匹配时才会返回true。也就是说,在要匹配的表达式之前或之后都不能有任何字符。使用std::regex_搜索匹配部分字符串


为什么std::regex_搜索会导致堆栈溢出?从代码摘录中不容易看出这一点。不过,如果您找到了匹配项而不是从库中找到了匹配项,则最有可能的错误是您所做的处理的结果。通过调试器旋转它,您将很快看到堆栈溢出的原因。

regex在较新的gcc中不完全受支持。我在终端中使用了正则表达式并创建了一个新文件:

 grep -E ";([^,]*,[^,]*,){7,}" file.txt>>res.txt

这是什么编译器?记住:现在更新的gcc并不完全支持正则表达式。使用Boost!我想这是我编辑代码的主要问题。看上面!异常是:code.exe中0x774BDF3E ntdll.dll处的未处理异常:0xC00000FD:堆栈溢出参数:0x00000001,0x002fec。调试器告诉您异常来自哪一行?如果std::regex_searchline,m,std::regex;[^,]*,[^,]*,{7,}