Как сопоставить следующий шаблон coodinates с помощью регулярных выражений на C ++?

Я хотел бы проверить, соответствует ли он следующему формату:

(целое, целое), включая круглые скобки и запятые. Например: 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";

но я получаю ошибку во время выполнения

2

Решение

Кажется, вы ищете

regex check(R"(\([-+]?\d+,[-+]?\d+\))")

Это определяет образец как ^\([-+]?\d+,[-+]?\d+\)$ при использовании с std::regex_match это требует полного совпадения строк.

Подробности:

  • ^ — начало строки (неявное в regex_match)
  • \( — а (
  • [-+]? — 1 или 0 + или же - символы
  • \d+ — 1 или более цифр
  • , — запятая
  • [-+]? — 1 или 0 + или же - символы
  • \d+ — 1 или более цифр
  • \) — а )
  • $ — конец строки (неявный в regex_match)

C ++ demo:

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!
2

Другие решения

Попробуйте ввести это регулярное выражение \(\d{1,},\d{1,}\)

Может быть, это может работать

0