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

标签 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::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/

相关文章:

C++ unordered_map 获取段错误

c++ - std::atoll 与 VC++

c++ - 在 snprintf 中调用 strlen 期间调用 backtrace_symbols_fd() 有时会挂起

regex - 逃逸美元

javascript - 如何在JavaScript中将句号、问号和感叹号后的首字母大写?

c++ - 哪种持续集成工具最适合 C++ 项目?

php - 使用 php 从文本中删除所有 url

php - 在 ubuntu 服务器上安装了 libphp-mailer,如何在 web 项目中使用它?

linux - 没有明显原因的段错误

ruby-on-rails - 在计算机重启时运行 Rails 项目