c++ - 初始化时正则表达式 C++ 崩溃
问题描述
我目前正在使用正则表达式查找注册表路径匹配。
我已将正则表达式初始化为
regex regx("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\\\{0398BFBC-913B-3275-9463-D2BF91B3C80B\\}")
并且程序抛出std::tr1::regex_error
异常。
我试图使用大括号来逃避大括号,"\\\\"
但它仍然没有用。
关于如何解决它的任何想法?
我在 Windows 10、Visual Studio 2010 上。
解决方案
让我们看一下 C++ 字符串文字(我们可以阅读的稍短的文字):
"A\\B\\C"
考虑到文字转义,这实际上是字符串:
A\B\C
现在您将此字符串传递给正则表达式引擎。但是正则表达式有自己的转义,但没有转义序列\B
或\C
(可能有,但没有你的实际字符)。
因此,正则表达式无效,尝试实例化它会引发异常。
您将需要额外的转义层:
"A\\\\B\\\\C"
或者使用原始字符串文字:
R"(A\\B\\C)"
换句话说:
regex regx(R"(HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\\\{0398BFBC-913B-3275-9463-D2BF91B3C80B\\})")
(呸!)
推荐阅读
- android - 缓存控制在某些 Android 浏览器中不起作用
- windows - Zookeeper 的 Windows 10 环境变量问题
- c - 在 C 中使用三元运算符时,char * 和 const char * 是否兼容?
- java - 如何使用Spring根据查询参数键和值进行过滤
- docker - 如何在 Cloud Run 上自动部署 Cloud Build 构建的 docker 镜像
- azure - Azure - 无法从私有 Azure 存储库运行映像
- java - 当密钥使用文件夹结构定义时,我们如何从 AWS S3 存储桶中获取对象?
- c++ - 如何停止这个模板化函数值初始化一个新构造的对象?
- visual-studio-2019 - Visual Studio 2019 的指标边距上的各种括号是什么意思?
- arrays - 将 JSON 结构转换为数组:Groovy