Я намагаюся відповідати 4 рівним символам на C ++.
Вони повинні відповідати = KQQQQ, ZZZZQ
Це те, що я досі спробував:
std::string mano_to_reg = "KQQQQ";
std::regex pokar("(.)1{3}");
std::smatch match;
std::cout << "match = " << std::regex_match(mano_to_reg, match, pokar) << "n";
Але це не виграло матчу.
Я теж пробував std::regex_search
, але це також не виграло.
Я спробував використовувати базовий і розширити синтаксис
Я також спробував змінити свою схему на "(.)1{4}"
, "((.)1{3})"
і будь-яка інша їх комбінація.
Я спробував співставити інші візерунки з іншими рядками, і більшість з них працює. Здається, проблема полягає в зворотному відношенні, але я "шукав всюди і не можу знайти, чому це не відповідає.
Я використовую clang ++ 7.0.2 на OS X 10.11.3 з прапорцями -std = c ++ 11 -stdlib = libc ++.
Я також спробував g ++ 5.3.0 з -std = c ++ 11 -std = gnu ++ 11 прапорами.
Відповіді:
2 для відповіді № 1У вас є дві проблеми:
- Тобі потрібно Втеча
. Регістр
(.)1{3}
є правильним, але для того, щоб зберегти це в рядковому літералі, вам потрібно уникнути цього, щоб воно було"(.)\1{3}"
. - Ви, напевно, хочете
std::regex_search
замістьstd::regex_match
. Рядок"KQQQQ"
не відповідає регексу(.)1{3}
, але підрядку"QQQQ"
робить
Наступна програма:
#include <iostream>
#include <regex>
#include <string>
int main() {
std::string mano_to_reg = "KQQQQ";
std::regex pokar("(.)\1{3}");
std::smatch match;
std::cout << "match = " << std::regex_match(mano_to_reg, match, pokar) << "n";
std::cout << "search = " << std::regex_search(mano_to_reg, match, pokar) << "n";
}
match = 0
search = 1