这是我正在使用的代码
string exptype(string s)
{
string type = "";
try
{
if (regex_match(s.c_str(), regex("101(0|1)*111")))
type = "a valid binary";
else if (regex_match(s.c_str(), regex("[a-zA-Z]")))
type = "a valid combination of alphanum letters";
else if (regex_match(s.c_str(), regex("\([0-9]{3}\)[0-9]{3}-{0-9}{4}")))
type = "a valid phone number";
else if (regex_match(s.c_str(), regex("(19|20)[0-9][0-9]-(0[1-9]|1[0-2])- ((0[1-9])|([1-2][0-9])|(3[0-1]))")))
type = "a valid date";
else
type = "an invalid string";
}
catch (std::regex_error& e)
{
cout << e.code() << endl;
}
return type;
}
然后我的主要内容如下:
int main()
{
string input;
do
{
cout << "Enter the string that will be validated.." << endl;
getline(cin, input);
if (input != "q")
{
cout << "This is " << exptype(input) << endl;
}
else
break;
} while (true);
return 0;
}
上述代码有时会起作用,有时它会抛出错误代码的异常:7 我用google搜索它,发现错误是error_brace:表达式包含不匹配的大括号({和})。 我不明白这里有什么问题,感谢任何帮助。
由于
答案 0 :(得分:1)
正如Mariano指出的那样,您应该将{0-9}
替换为[0-9]
。在处理正则表达式或其他带有转义\
的字符串时,最好还使用原始字符串。例如:
regex_match(s.c_str(), regex(R"reg(\([0-9]{3}\)[0-9]{3}-[0-9]{4})reg"))