C++ std::regex The updated is present here #include <cmath> #include <iostream> #include <regex> #include <string> using std::cout; using std::endl; int main() { std::string original{ "The sun dipped below the horizon, casting long shadows across the deserted beach. "}; cout << original << endl << endl; // String Replacement: Replace all occurrences of the word "beach" with "coast". std::regex string_replace_regex("beach"); std::string replaced = std::regex_replace(original, string_replace_regex, "coast"); cout << "beach to coast: " << replaced << endl; cout << endl; // Advanced replace with capturing groups // Replace the words starting with s, by duplicating them std::regex ad_string_replace_regex("\\b(?=s)([\\w]+)\\b"); // Use '$' to specify capturing groups. // $0 = entire substring matching the regex patten // $1 and so on = individual capture groups std::string ad_replaced = std::regex_replace(original, ad_string_replace_regex, "$1$1"); cout << "double words starting with s: " << ad_replaced << endl; cout << endl; // String Search: Find all instances of words that start with the letter "s". /* std::regex_match will only return true if the regular expression matches the entire string sequence std::regex_search will successfully match any subsequence of the given sequence, ONLY ONCE To search "globally" we have to use std::sregex_iterator std::sregex_iterator will iterator over the string, every time it will call regex_search, and save the result in an object of std::smatch *operator on std::sregex_iterator will return the object of std::smatch str(n) or operator[n] on std::smatch object will return n = 0: entire matched string n > 0: capturing groups */ std::regex string_search_regex("\\bs(\\w*)\\b"); // capturing group is added just for fun std::sregex_iterator iter(original.begin(), original.end(), string_search_regex); std::sregex_iterator end; cout << "Instances of words that start with s: " << endl; while (iter != end) { std::smatch match = *iter; // number of std::sub_match in the current std::smatch // std::cout << match.size() << " "; std::cout << match[0] << " "; // whole matched string // std::cout << match[1] << " "; // 1st captured group ++iter; } cout << endl << endl;