c++ - 如何转义字符串以在 Boost Regex 中使用

标签 c++ regex boost escaping

我只是想了解正则表达式,我正在使用 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/

相关文章:

c++ - 不扔是零成本的时候,noexcept 是不是没用?

c++ - 如何使用具有默认值的参数制作函数原型(prototype)?

c# - 正则表达式从 img 标签获取 src 值

c++ - Boost sub_match 抛出 std::length_error 异常

C++通过字符串名称调用不同的函数

c++ - 为什么返回值不同?

c++ - 无法在 Visual Studio C++ 调试器中查看数组?

regex - 将驼峰大写更改为短划线分隔的小写的单个正则表达式

javascript - 使用 JavaScript 拆分逗号分隔的字符串但忽略分号之间的逗号

C++ boost 正则表达式日期错误