. ^ $ | ( ) [ ] { } * + ? \
Как ни странно, вы можете использовать регулярное выражение для экранирования своего URL, чтобы его можно было вставить в регулярное выражение.
const boost::regex esc("[.^$|()\\[\\]{}*+?\\\\]");
const std::string rep("\\\\&");
std::string result = regex_replace(url_to_escape, esc, rep,
boost::match_default | boost::format_sed);
(флаг boost::format_sed
указывает на использование формата строки замены sed. В sed экранирование &
выведет все, что соответствует целому выражению)
Или, если вас не устраивает формат строки замены sed, просто измените флаг на boost::format_perl
, и вы можете использовать знакомый $&
для ссылки на то, что соответствует всему выражению.
const std::string rep("\\\\$&");
std::string result = regex_replace(url_to_escape, esc, rep,
boost::match_default | boost::format_perl);