Regular expressions (regexes) are a good way to lex out the pieces of an input string before parsing them. The default regex dialect in C++ is the same as in JavaScript. Use this to your advantage.
Prefer to avoid raw string literals in situations where an extra pair of parentheses could be confusing. When possible, limit the number of escaped backslashes in your regexes by using square brackets to escape special characters instead.
std::regex rx is basically immutable and represents a finite state machine. std::smatch m is mutable and holds information about a particular match within the haystack string. Submatch m[0] represents the whole matched substring; m[k] represents the kth capturing group.
std::regex_match(s, m, rx) matches the needle against the entire haystack string; std::regex_search(s, m, rx) looks for the needle in the haystack. Remember that the haystack...