Как сопоставить следующий шаблон 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
)
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,}\)
Может быть, это может работать