我正在尝试使用正则表达式来验证字符串,所以在我继续之前让我先解释一下字符串的样子:可选的位数后跟一个“X”和一个可选的(“^”后跟一个或更多数字)。
以下是一些示例:“2X”、“X”、“23X^6”适合该模式,而“X^”、“4”、“foobar”、“4X^”、“4X44”等字符串则不适合。
现在我在哪里:使用 'egrep' 和 "^[0-9]{0,}\X(\^[0-9]{1,})$" 正则表达式我可以很好地验证这些字符串但是在尝试时this 在 C++ 中使用 C++11 正则表达式库失败。
这是我用来验证这些字符串的代码:
#include <iostream>
#include <regex>
#include <string>
#include <vector>
int main()
{
std::regex r("^[0-9]{0,}\\X(\\^[0-9]{1,})$",
std::regex_constants::egrep);
std::vector<std::string> challanges_ok {"2X", "X", "23X^66", "23X^6",
"3123X", "2313131X^213213123"};
std::vector<std::string> challanges_bad {"X^", "4", "asdsad", " X",
"4X44", "4X^"};
std::cout << "challanges_ok: ";
for (auto &str : challanges_ok) {
std::cout << std::regex_match(str, r) << " ";
}
std::cout << "\nchallanges_bad: ";
for (auto &str : challanges_bad) {
std::cout << std::regex_match(str, r) << " ";
}
std::cout << "\n";
return 0;
}
我做错了什么还是我错过了什么?我在 GCC 4.7 下编译。