void ASPVariableQuery::createHeadQueryValues(vector<string> queryVec) { vector<string> valuesToParse; for (auto queryString : queryVec) { auto vec = createHeadPredicates(queryString); for (auto s : vec) { valuesToParse.push_back(s); } } regex words_regex("[A-Z]+(\\w*)"); for (auto value : valuesToParse) { size_t begin = value.find("("); size_t end = value.find(")"); string tmp = value.substr(begin, end - begin); auto words_begin = sregex_iterator(tmp.begin(), tmp.end(), words_regex); auto words_end = sregex_iterator(); while (words_begin != words_end) { smatch match = *words_begin; string match_str = match.str(); tmp.replace(match.position(), match.length(), this->solver->WILDCARD_STRING); words_begin = sregex_iterator(tmp.begin(), tmp.end(), words_regex); } value = value.replace(begin, end - begin, tmp); stringstream ss; ss << this->queryProgramSection << "(" << value << ")"; auto val = this->solver->parseValue(ss.str()); this->headValues.emplace(val, vector<Clingo::Symbol>()); } }
int main() { const std::string s = "Quick brown fox."; std::regex words_regex("[^\\s]+"); auto words_begin = std::sregex_iterator(s.begin(), s.end(), words_regex); auto words_end = std::sregex_iterator(); std::cout << "Found " << std::distance(words_begin, words_end) << " words:\n"; for (std::sregex_iterator i = words_begin; i != words_end; ++i) { std::smatch match = *i; std::string match_str = match.str(); std::cout << match_str << '\n'; } }