c ++正则表达式匹配不能按预期工作

时间:2017-10-09 09:22:59

标签: regex string qt c++11

我有一个非常简单的任务:从文件中读取方程式,然后在其他算法中使用它。我需要检查文件包含的等式是否正确,所以我使用正则表达式。正则表达式代表文件中的整个字符串,这就是我使用regex_match的原因。但我一直得到错误的结果。例如,我的文件中有((4563722- 5764545 ) * ( 657457 + 75477) -647586 )+ 748785 /5,它与正则表达式不匹配。我搜索了很多关于我的问题,但没有建议的解决方案适合我。

我在Windows上使用最新版本Qt creator和mingw32。提前谢谢。

#include <QCoreApplication>
#include<iostream>
#include<fstream> 
#include<string> 
#include<stdio.h> 
#include<regex>
using namespace std;

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
ifstream FILE;
string filename, equation, check;

const regex distr(("\\s*\\(*\\s*[123456789]\\d*\\s*\\)*(\\s*[\\+\\-\\*\\/]\\s*\\(*\\s*[123456789]\\d*\\s*\\)*\\s*)*"), std::regex_constants::extended);

do{
    cout << "Input name of file" << endl;
    getline(cin, filename);
    FILE.open(filename.c_str());
    if (!FILE.is_open())
        cout << "Error. Cannot open file" << endl;
    else{
        getline(FILE, check);
        if(FILE.eof() && check.empty()){
            cout << "Error. File is empty" << endl;
            FILE.close();
        }
    }
}while((!FILE.is_open())||(check.empty()));
FILE.close();
FILE.open(filename.c_str());
getline(FILE, equation);
cout << equation << endl;
FILE.close();
if (regex_match(equation, distr))
    cout << "True" << endl;
else
    cout << "False" << endl;
return a.exec();
}    

0 个答案:

没有答案