How to escape a string for use in Boost Regex
boost, c++, escaping, regex
Solution
. ^ $ | ( ) [ ] { } * + ? \
Ironically, you could use a regex to escape your URL so that it can be inserted into a regex.
const boost::regex esc("[.^$|()\\[\\]{}*+?\\\\]");
const std::string rep("\\\\&");
std::string result = regex_replace(url_to_escape, esc, rep,
boost::match_default | boost::format_sed);
(The flag `boost::format_sed` specifies to use the replacement string format of sed. In sed, an escape `&` will output whatever matched by the whole expression)
Or if you are not comfortable with sed's replacement string format, just change the flag to `boost::format_perl`, and you can use the familiar `$&` to refer to whatever matched by the whole expression.
const std::string rep("\\\\$&");
std::string result = regex_replace(url_to_escape, esc, rep,
boost::match_default | boost::format_perl);
Problem
I'm just getting my head around regular expressions, and I'm using the Boost Regex library. I have a need to use a regex that includes a specific URL, and it chokes because obviously there are characters in the URL that are reserved for regex and need to be escaped. Is there any function or method in the Boost library to escape a string for this kind of usage? I know there are such methods in most other regex implementations, but I don't see one in Boost. Alternatively, is there a list of all characters that would need to be escaped?