我使用 boost::regex 遇到了一个奇怪的行为。
以下函数调用自身一次(如果使用参数“true”调用)。
void regex_rek(bool recurse)
{
boost::smatch match;
if ( recurse )
{
std::string txt( "aaa" );
boost::regex rgx("aaa");
boost::regex_match(txt, match, rgx );
}
else
{
std::string txt("bbb");
boost::regex rgx("bbb");
boost::regex_match(txt, match, rgx );
}
std::cout <<"before: "<< std::string(match[0]) << std::endl;
if (recurse)
{
regex_rek(false);
}
std::cout <<"after: "<< std::string(match[0]) << std::endl;
}
这个的输出应该是
before: aaa
before: bbb
after: bbb
after: aaa
但它是(对我来说,在 ubuntu-64bit 上运行,使用 boost-1.48):
before: aaa
before: bbb
after: bbb
after: bbb
在 win64、msvc11、boost-1.53 上我得到了别的东西:
before: aaa
before: bbb
after: bb
after: aa
可不是闹着玩的。这是我的错吗?我在某个地方犯了一个大错误吗?
我发现如果我使用该cmatch
版本,一切都很好。但这对我来说没有选择,因为我的字符串可能包含0x0
.