文字列を検証するために正規表現を使用しようとしているので、先に進む前に、まず文字列がどのように見えるかを説明させてください: オプションの桁数の後に「X」とオプションの (「^」の後に 1 つまたはより多くの桁)。
"2X"、"X"、"23X^6" はパターンに適合しますが、"X^"、"4"、"foobar"、"4X^"、"4X44" などの文字列は適合しません。
今どこにいましたか:「egrep」と「^[0-9]{0,}\X(\^[0-9]{1,})$」正規表現を使用すると、これらの文字列をうまく検証できますが、試してみるとこれは 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 でコンパイルしています。