在一些机器上提升正则表达式子匹配

时间:2012-01-20 23:20:20

标签: c++ regex linux boost

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

1 个答案:

答案 0 :(得分:0)

将编译器更新到更高版本修复了该问题。我很惊讶使用旧的4.1编译器编译提升默认打破了SUSE盒子上的子匹配功能。