【发布时间】:2014-10-29 13:17:45
【问题描述】:
出于速度和内存管理的原因,我正在将 PHP 程序转换为 C++。因为PHP uses Perl-Compatible syntax,所以我去了also uses the Perl syntax的boost库
使用 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 > 内存位置 0x002DED5C。
从读入内存的原始字符串中可以看出,黑斜线转义似乎没有问题。
就像我说的,7 个表达式中只有 1 个不会直接从 PHP 编译出来。我猜它与正则表达式的基础知识有关,但我对正则表达式的精通程度不足以识别它。这甚至不是迄今为止最复杂的表达方式!有任何想法吗?
【问题讨论】:
-
我不确定
[\w]+是否真的是您需要的[]应该是一组字符。我会在那里简单地使用\w+。另外我认为你需要逃避你的{和}。比如:R"~(^(\w+= \{\s*(?:[a-f0-9]{2}\s+)*\})\s*)~" -
你是对的。你应该已经回答了这个问题!