C++ 正则表达式在不使用时取等号';我不这么认为';它应该在c++;

C++ 正则表达式在不使用时取等号';我不这么认为';它应该在c++;,c++,regex,eclipse,c++11,C++,Regex,Eclipse,C++11,所以我应该接受用户输入并计算用户输入是否是有效的中缀表达式。我只接受+-/*()和数字。 所以最简单的方法就是使用正则表达式 这是我的正则表达式:[\(\)\d\+-\/\*]+。 我也试过:[\(\)0-9\+\-\/\*]+以及 [\(\)[:数字:\+\-\/\*]+ 我也尝试过不使用转义字符,但仍然得到相同的结果 问题是,当我将=作为表达式时,它会传递 代码如下: cout<<"Enter the infix expression: "; cin>>userInp

所以我应该接受用户输入并计算用户输入是否是有效的中缀表达式。我只接受
+-/*()
和数字。 所以最简单的方法就是使用正则表达式

这是我的正则表达式:
[\(\)\d\+-\/\*]+
。 我也试过:
[\(\)0-9\+\-\/\*]+
以及
[\(\)[:数字:\+\-\/\*]+

我也尝试过不使用转义字符,但仍然得到相同的结果

问题是,当我将
=
作为表达式时,它会传递

代码如下:

cout<<"Enter the infix expression: ";
cin>>userInput;
regex infix ("[\(\)\d\+\-\/\*]+");
while(cin.fail()||regex_match(userInput,infix)){
    cin.clear();
    cin.ignore(256, '\n');
    cout<<"Error: Not a valid infix expression!\n";
    cout<<"Enter the infix expression: ";
    cin>>userInput;
}
cout<<"Valid expression!\n";
预期产出:

Enter the infix expression: =
Error: Not a valid infix expression!

如果您需要更多代码,请告诉我。

固定正则表达式声明如下所示

regex infix(R"([()\d+/*-]+)");
或者,如果无法使用原始字符串文字:

regex infix("[()\\d+/*-]+");

请注意,介于
+
/
之间的连字符,无论是否转义,都会在这两个符号之间创建一个范围。另外,
\d
在常规字符串文字中必须看起来像
\\d
,在原始字符串文字中必须看起来像
\d

/
符号不必转义

此外,必须调整逻辑以返回适当的错误消息/行为:

#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() {
    string userInput = "=";
    regex infix(R"([()\d+/*-]+)");
    if(regex_match(userInput,infix)){
        cout<<"Valid expression!\n";
    } else {
        cout<<"Error: Not a valid infix expression!\n";
    }
    return 0;
}
// => Error: Not a valid infix expression!
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串userInput=“=”;
正则表达式中缀(R“([()\d+/*-]+)”;
if(regex_匹配(userInput,中缀)){

CUTI从来没有在C++中做过正则表达式,但是在其他语言中,当使用方括号时,你不必逃避大多数字符,但是<>代码> -/Cub需要结束。我会尝试<代码> [[(+] /*\D- ] ] /<代码>我认为反斜杠字符本身必须被转义,不是吗?<代码>”[(+)+/\\d- ]。
你意识到正则表达式永远不会验证中缀表达式吗?@NetMage你的意思是我应该使用
来代替吗?我也尝试过,但是它不接受有效的表达式,例如
3*4
我打赌你需要
正则表达式中缀([()\\d+/*-]+);
。注意啊,我明白了。谢谢,我还认为代码逻辑有问题。是的,我不得不调整while条件。谢谢。
#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() {
    string userInput = "=";
    regex infix(R"([()\d+/*-]+)");
    if(regex_match(userInput,infix)){
        cout<<"Valid expression!\n";
    } else {
        cout<<"Error: Not a valid infix expression!\n";
    }
    return 0;
}
// => Error: Not a valid infix expression!