我在代码中使用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。

最佳答案

将编译器更新到更高版本解决了该问题。令我惊讶的是,使用旧版4.1编译器进行的编译提升无声地打破了该SUSE盒上的子匹配功能。

关于c++ - Boost Regex子匹配在某些计算机上为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8949102/

10-10 22:58