Boost Regex不会编译

时间:2014-10-29 13:17:46

标签: c++ regex boost

我正在将PHP程序转换为C ++以实现速度和内存管理。因为PHP uses Perl-Compatible syntax,我去了also uses the Perl syntax

的提升库

使用Visual Studio Express 2013,我能够按原样使用我的7个表达式中的6个。给我适合的那个是

^([\w]+= {\s*(?:[a-f0-9]{2}\s+)*})\s*

在代码中使用如下:

#include <string>
#include <boost/regex.hpp>
std::string regexError = R"~(^([\w]+= {\s*(?:[a-f0-9]{2}\s+)*})\s*)~";
boost::regex e(regexError);

此表达式匹配此Regex101 Example之类的字符串:

MASKSUBSYS= { 00 af 01 02 }

调用boost::regex e(regexError);

时,我收到以下运行时异常
  

RegexTest.exe中0x7515C41F处的未处理异常:Microsoft C ++异常:boost :: exception_detail :: clone_impl&gt;在内存位置0x002DED5C。

从原始字符串读入内存中可以看出,看起来黑色转义没有问题。

String in memory

就像我说的,7个表达式中只有1个不会直接从PHP编译。我猜它与正则表达式的基本原理有关,但我对正则表达式的认识不足以识别它。到目前为止,这甚至不是最复杂的表达!有任何想法吗?

1 个答案:

答案 0 :(得分:1)

问题很可能是大括号{ }元字符也需要进行转义。而不是在\w周围放置一个字符类,您可以按照以下方式自行编写。

R"~(^(\w+= \{\s*(?:[a-f0-9]{2}\s+)*\})\s*)~"

Code Demo