-1
私はドットで区切られた数字を解析し、各数字をsepate文字列として取得しようとしています。このサンプルでdotでstd :: regexを解析する
#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"(([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+))");
:
作品:
std::regex reg(R"((\d+)\.(\d+)\.(\d+)\.(\d+))");
作品をそれは私のサンプルプログラムです。
std::regex reg(R"(([0-9]+)\.(\1)\.(\1)\.(\1))");
私の質問は、なぜlast regexが動作していないのか、構文のどこに誤りがあるのですか?ありがとう。
'\ 1'は後方参照であるため、*パターン*を再帰的に呼び出すサブルーチン呼び出しではありません。最初のキャプチャグループでキャプチャした値と一致します。 –
@WiktorStribiżew:回答セクションに回答があります –
これはC++の質問ではなく、正規表現の質問です。あなたの問題を構成部分に分解する習慣に入ってください。 –