C++ Boost Regex子匹配在某些机器上为空

C++ Boost Regex子匹配在某些机器上为空,c++,regex,linux,boost,C++,Regex,Linux,Boost,我在代码中使用了boost正则表达式库。我有一个简单的应用程序,可以在运行Fedora的机器上正确编译和运行。当我在SUSE linux上编译相同的代码时,除了第一个子匹配字符串外,其他所有子匹配字符串都是空的 代码如下 const string pattern = "(abc)(def)"; const string target = "abcdef"; boost::regex regexPattern(pattern, boost::regex::extended); boost::s

我在代码中使用了boost正则表达式库。我有一个简单的应用程序,可以在运行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;
    }
}
SUSE上的输出如下

WHAT 0 abcdef
WHAT 1 abc
WHAT 2 def
WHAT 0 abcdef
WHAT 1 
WHAT 2 
我似乎在任何地方都找不到类似问题的参考资料。我假设有一个简单的修复方法,但尽管我在网上搜索了好几天,还是没能找到它

编译器有以下版本

Fedora:g++(GCC)4.5.1 20100924(红帽4.5.1-4)
SUSE:g++(GCC)4.1.2 20070115(SUSE Linux)


我在这两种情况下都使用Boost版本1.48.0。这两台计算机上都没有root。

将编译器更新到更高版本修复了此问题。我很惊讶使用较旧的4.1编译器编译boost时会悄悄地破坏SUSE框上的子匹配功能。

将编译器更新到更高版本修复了该问题。我很惊讶使用较旧的4.1编译器编译boost时会悄悄地破坏SUSE框上的子匹配功能。

我假设扩展的regexp语法在gcc 4.1.2下不起作用,但我也有同样的怀疑,尽管因为我没有根,这是一个艰难的选项测试。我猜我只是需要尝试推送一个请求来更新编译器。上次我问的时候,我真的被笑了lol。在旁注上,一个匹配仍然被正确检测到,并且返回了三个子匹配,表明库部分工作,只是其中两个子匹配被错误地作为空字符串返回。问题可能不是编译器本身——它几乎肯定是SDK附带的库之一。如果是这样的话,你可以找到这个库的源代码,自己编译它,然后静态链接它,以避免使用共享库——所有这些都不需要“有根”。我自己编译boost,我怀疑它只是在linux中使用GNU正则表达式库。我想我可以通过重写函数来验证是否存在相同的问题。除非你指的是我从源代码处编译boost使用的GNU库,我不这么做。我假设扩展的regexp语法在gcc 4.1.2下不起作用,但我也有同样的怀疑,因为我没有根代码,这是一个艰难的选项测试。我猜我只是需要尝试推送一个请求来更新编译器。上次我问的时候,我真的被笑了lol。在旁注上,一个匹配仍然被正确检测到,并且返回了三个子匹配,表明库部分工作,只是其中两个子匹配被错误地作为空字符串返回。问题可能不是编译器本身——它几乎肯定是SDK附带的库之一。如果是这样的话,你可以找到这个库的源代码,自己编译它,然后静态链接它,以避免使用共享库——所有这些都不需要“有根”。我自己编译boost,我怀疑它只是在linux中使用GNU正则表达式库。我想我可以通过重写函数来验证是否存在相同的问题。除非您指的是我从源代码处编译boost使用的GNU库,我不这么做。