我在代码中使用了boost regex库。我有一个简单的应用程序,可以在运行Fedora的机器上正确编译和运行。当我在SUSE linux上编译相同的代码时,除了第一个子匹配字符串之外的所有字符串都是空的。
代码如下
const string pattern = "(abc)(def)";
const string target = "abcdef";
boost::regex regexPattern(pattern, boost::regex::extended);
boost::smatch what;
bool isMatchFound = boost::regex_match(target, what, regexPattern);
if (isMatchFound)
{
for (unsigned int i=0; i < what.size(); i++)
{
cout << "WHAT " << i << " " << what[i] << endl;
}
}
Fedora的输出如下
WHAT 0 abcdef
WHAT 1 abc
WHAT 2 def
SUSE上的输出如下
WHAT 0 abcdef
WHAT 1
WHAT 2
我似乎无法在任何地方找到任何类似问题的参考。我假设有一个简单的解决办法,但是尽管在网上搜索了几天,但我还是找不到它。
编译器有以下版本。
Fedora:g ++(GCC)4.5.1 20100924(Red Hat 4.5.1-4)
SUSE:g ++(GCC)4.1.2 20070115(SUSE Linux)
我在两种情况下都使用Boost版本1.48.0。我在这两台机器上都没有root。
答案 0 :(得分:0)
将编译器更新到更高版本修复了该问题。我很惊讶使用旧的4.1编译器编译提升默认打破了SUSE盒子上的子匹配功能。