首页 > 解决方案 > 初始化时正则表达式 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++regex

解决方案


让我们看一下 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\\})")

(呸!)


推荐阅读