gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:46:45 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com