/ / Analizzare i numeri per punto con std :: regex [duplicato] - c ++, regex, analisi

Analizza i numeri per punto con std :: regex [duplicato] - c ++, regex, analisi

Sto cercando di analizzare i numeri separati da punti e ottenere ogni numero come stringa separata. Questo è il mio programma di esempio:

#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;
}

In questo esempio sto usando tre regex:

lavori:

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

lavori:

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

non funziona affatto:

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

La mia domanda è: perché l'ultima regex non funziona e dov'è l'errore nella sintassi? Grazie.

risposte:

0 per risposta № 1

L'errore non è nella tua sintassi; è nella tua logica.

I riferimenti indietro non ripetono un modello; corrispondono al testo precedentemente abbinato.

Quindi, il tuo modello corrisponderebbe 123.123.123.123.