/ / std :: regex [duplicate]でドットで数を解析する - C ++、regex、parsing

std :: regex [duplicate]でドットを解析する - c ++、regex、parsing

私は点で区切られた数字を解析し、各数字を別々の文字列として取得しようとしています。それは私のサンプルプログラムです:

#include <iostream>
#include <string>
#include <regex>

int main(int argc, char* argv[])
{
try
{
std::string data("123.321.456.654");
std::regex reg(R"(([0-9]+).(1).(1).(1))");
std::smatch m;
if (std::regex_match(data, m, reg))
{
std::cout << m.size() << std::endl;
//std::cout << m[0].str() << std::endl;
std::cout << m[1].str() << std::endl;
std::cout << m[2].str() << std::endl;
std::cout << m[3].str() << std::endl;
std::cout << m[4].str() << std::endl;
}
}
catch (const std::exception& e)
{
std::cerr << "Error occurred: " << e.what() << std::endl;
}

return EXIT_SUCCESS;
}

このサンプルでは、​​3つの正規表現を使用しています。

作品:

std::regex reg(R"((d+).(d+).(d+).(d+))");

作品:

std::regex reg(R"(([0-9]+).([0-9]+).([0-9]+).([0-9]+))");

全く動かない:

std::regex reg(R"(([0-9]+).(1).(1).(1))");

私の質問はなぜ最後のregexが動作していないと構文のエラーはどこですか?ありがとう。

回答:

回答№1は0

エラーは構文にはありません。それはあなたの論理です。

後方参照はパターンを繰り返さない。 以前に一致したテキストと一致する.

あなたのパターンは一致します 123.123.123.123.