How to escape a string for use in Boost Regex(如何转义字符串以在 Boost Regex 中使用)
问题描述
我刚开始了解正则表达式,我正在使用 Boost Regex 库.
I'm just getting my head around regular expressions, and I'm using the Boost Regex library.
我需要使用一个包含特定 URL 的正则表达式,它会阻塞,因为显然 URL 中有一些字符是为正则表达式保留的,需要转义.
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.
Boost 库中是否有任何函数或方法可以为这种用法转义字符串?我知道在大多数其他正则表达式实现中都有这样的方法,但我在 Boost 中没有看到.
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?
推荐答案
. ^ $ | ( ) [ ] { } * + ?
具有讽刺意味的是,您可以使用正则表达式来对 URL 进行转义,以便将其插入到正则表达式中.
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);
(标志boost::format_sed
指定使用 sed 的替换字符串格式.在 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)
或者如果你对sed的替换字符串格式不满意,只需将标志更改为boost::format_perl
,你可以使用熟悉的$&
来引用到与整个表达式匹配的任何内容.
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);
这篇关于如何转义字符串以在 Boost Regex 中使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何转义字符串以在 Boost Regex 中使用
基础教程推荐
- 从 std::cin 读取密码 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01