我正在将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。
从原始字符串读入内存中可以看出,看起来黑色转义没有问题。
就像我说的,7个表达式中只有1个不会直接从PHP编译。我猜它与正则表达式的基本原理有关,但我对正则表达式的认识不足以识别它。到目前为止,这甚至不是最复杂的表达!有任何想法吗?
答案 0 :(得分:1)
问题很可能是大括号{ }
元字符也需要进行转义。而不是在\w
周围放置一个字符类,您可以按照以下方式自行编写。
R"~(^(\w+= \{\s*(?:[a-f0-9]{2}\s+)*\})\s*)~"