我只是想了解正则表达式,我正在使用 Boost Regex 库。
我需要使用包含特定 URL 的正则表达式,但它会阻塞,因为显然 URL 中存在为正则表达式保留的字符并且需要转义。
Boost 库中是否有任何函数或方法可以为这种用法转义字符串?我知道在大多数其他正则表达式实现中都有这样的方法,但我在 Boost 中没有看到。
或者,是否有需要转义的所有字符的列表?
最佳答案
. ^ $ | ( ) [ ] { } * + ? \
具有讽刺意味的是,您可以使用正则表达式来转义您的 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的替换字符串格式,只需将flag改成boost::format_perl
,就可以使用熟悉的$&
来引用与整个表达式匹配的任何内容。
const std::string rep("\\\\$&");
std::string result = regex_replace(url_to_escape, esc, rep,
boost::match_default | boost::format_perl);
关于c++ - 如何转义字符串以在 Boost Regex 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1252992/