我在我的代码中使用了 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;
}
}
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 编译器编译 boost 时悄悄地破坏了那个 SUSE 机器上的子匹配功能。
关于c++ - Boost Regex 子匹配在某些机器上为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949102/