当我不认为它应该在c ++中时,正则表达式采用等号

时间:2017-06-19 21:32:40

标签: c++ regex eclipse c++11

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

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

我也试过没有转义字符,但我仍然得到相同的结果。

问题在于,当我将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: =
Valid expression!

当前输出:

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

预期产出:

auto.offset.reset = earliest

如果您需要更多代码,请与我们联系。

1 个答案:

答案 0 :(得分:1)

固定的正则表达式声明看起来像

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

或者,如果你不能使用原始字符串文字:

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

请参阅C++ demo

请注意+/之间的连字符,无论是否转义,都会在这两个符号之间创建范围。此外,\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!