int main() { std::string s = "Some people, when confronted with a problem, think " "\"I know, I'll use regular expressions.\" " "Now they have two problems."; std::regex self_regex("REGULAR EXPRESSIONS", std::regex_constants::ECMAScript | std::regex_constants::icase); if (std::regex_search(s, self_regex)) { std::cout << "Text contains the phrase 'regular expressions'\n"; } std::regex word_regex("(\\S+)"); auto words_begin = std::sregex_iterator(s.begin(), s.end(), word_regex); auto words_end = std::sregex_iterator(); std::cout << "Found " << std::distance(words_begin, words_end) << " words\n"; const int N = 6; std::cout << "Words longer than " << N << " characters:\n"; for (std::sregex_iterator i = words_begin; i != words_end; ++i) { std::smatch match = *i; std::string match_str = match.str(); if (match_str.size() > N) { std::cout << " " << match_str << '\n'; } } std::regex long_word_regex("(\\w{7,})"); std::string new_s = std::regex_replace(s, long_word_regex, "[$&]"); std::cout << new_s << '\n'; }
static void readParamsAndStartTrace() { std::string paramsLine; char buff[4096]; while (true) { ssize_t sz = read(s_stdout_fd, buff, 4095); if (sz < 0) { cleanup(); return ; } buff[sz] = '\0'; paramsLine += buff; if (paramsLine.find('\n') > 0) break; } std::regex word_regex("(\"[^\"]*\")|([^\\s]+)"); auto words_begin = std::sregex_iterator(paramsLine.begin(), paramsLine.end(), word_regex); auto words_end = std::sregex_iterator(); std::vector<std::string> paramsVector; std::vector<char *> params; params.push_back(TAG); for (std::sregex_iterator i = words_begin; i != words_end; ++i) { paramsVector.push_back(i->str()); params.push_back(const_cast<char*>(paramsVector.back().c_str())); } { std::unique_lock<std::mutex> lock(s_stateMutex); __android_log_print(ANDROID_LOG_DEBUG, TAG, "Wait for stderr socket"); s_stateWait.wait(lock, []{return s_stderr_fd != -1; }); } __android_log_print(ANDROID_LOG_DEBUG, TAG, "Start retrace"); optind = 1; optreset = 1; main(params.size(), ¶ms[0]); cleanup(); // Remove "std::exit" after apitrace will cleanup its static variables. std::exit(0); // goodbye cruel world ! }