Как сопоставить следующий шаблон 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!

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

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

Другие вопросы по тегам