Я хотел бы проверить, соответствует ли он следующему формату:
(целое, целое), включая круглые скобки и запятые. Например: for (3,4) вернет true, а for (6.4 вернет false
Я пробовал с
string input;
regex check("(\\-|+)?[[:d:]]+,?(\\-|+)?[[:d:]]+");
cin >> input;
if (regex_match(input, check)) cout << "okay" << endl;
else cout << "error";
но я получаю ошибку во время выполнения
Кажется, вы ищете
regex check(R"(\([-+]?\d+,[-+]?\d+\))")
Это определяет образец как ^\([-+]?\d+,[-+]?\d+\)$
при использовании с std::regex_match
это требует полного совпадения строк.
Подробности:
^
— начало строки (неявное в regex_match
)\(
— а (
[-+]?
— 1 или 0 +
или же -
символы\d+
— 1 или более цифр,
— запятая[-+]?
— 1 или 0 +
или же -
символы\d+
— 1 или более цифр\)
— а )
$
— конец строки (неявный в regex_match
)regex check(R"(\([-+]?\d+,[-+]?\d+\))");
string s1("(44,45)");
string s2("(44,45");
smatch match;
if (regex_match(s1, match, check)) {
cout << s1 << ": Matched!" << endl;
} else {
cout << s1 << ": Not matched!" << endl;
}
if (regex_match(s2, match, check)) {
cout << s2 << ": Matched!" << endl;
} else {
cout << s2 << ": Not matched!" << endl;
}
Выход:
(44,45): Matched!
(44,45: Not matched!
Попробуйте ввести это регулярное выражение \(\d{1,},\d{1,}\)
Может быть, это может работать