Witam, mam taki program:
#include <iostream>
#include <regex>
#include <string>
int main(){
std::string str;
std::regex e("(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)", std::regex_constants::icase);
while (true) {
std::cin >> str;
bool match = std::regex_match(str, e);
std::cout << (match ? "Matched" : "Not matched") << "\n\n";
}
std::cin.get(); std::cin.get();
}
Wzorzec ma pozwolić na wpisanie czegoś takiego:
(1-3 cyfr lub samo 0) . (1-3 cyfr lub samo 0)
Zaakceptowane zostaną więc takie dane:
0.0
213.5
43.4
4.0
0.999
Wiem że zamiast kilka razy kopiować tą samą grupę możemy napisać po prostu \\numer_grupy. Wzór napisałem więc tak:
std::regex e("(([1-9][0-9]{0,2})|0)\.\\1", std::regex_constants::icase);
Teraz już program nie działa poprawnie, oto przykłady danych:
Zauważyłem że dane wejściowe są akceptowane tylko wtedy kiedy po obu stronach od kropki są takie same cyfry. Czy jest jakiś inny sposób odnoszenia się do grup by tego uniknąć ( poza koniecznością kopiowania )?
Będę wdzięczny za pomoc, w internecie bardzo ciężko mi znaleźć na ten temat informacje.