Próbuję parsować liczby oddzielone kropkami i uzyskać każdą liczbę jako ciąg oddzielny. Oto mój przykładowy program:
#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;
}
W tym przykładzie używam trzech wyrażeń regularnych:
Prace:
std::regex reg(R"((d+).(d+).(d+).(d+))");
Prace:
std::regex reg(R"(([0-9]+).([0-9]+).([0-9]+).([0-9]+))");
w ogóle nie działają:
std::regex reg(R"(([0-9]+).(1).(1).(1))");
Moje pytanie brzmi: dlaczego ostatnie wyrażenie regularne nie działa i gdzie występuje błąd w składni? Dzięki.
Odpowiedzi:
0 dla odpowiedzi № 1Błąd nie występuje w twojej składni; jest to w twojej logice.
Odwołania wsteczne nie powtarzają wzoru; pasują do wcześniej dopasowanego tekstu.
Twój wzór by pasował 123.123.123.123
.