非常基本的正则表达式场景与我对libstdc ++ - v3的期望不同

时间:2012-03-21 12:41:41

标签: c++ regex g++ c++11 libstdc++

我的行为与我的期望不同(也与Microsoft C ++不同)。

考虑以下test.cpp文件:

#include <iostream>
#include <ostream>
#include <regex>

int main( void )
{
    std::regex rx( "a(b+)(c+)d" );
    std::string s( "abbbbccd" );
    std::smatch m;

    bool f = regex_match( s, m, rx );
    std::cout << std::boolalpha << f << std::endl;
    if( f ) {
        std::cout << "m[1]=" << m[1] << std::endl;
        std::cout << "m[2]=" << m[2] << std::endl;
    }

    return 0;
}

在我的Ubuntu Oneiric框中,注意我是如何编译程序的,并注意我从a.out获得的输出:

$ g++ -std=c++0x test.cpp
$ ./a.out
true
m[1]=abbbb
m[2]=bcc

另一方面,在我的Windows机器上,使用Visual Studio 2010我:

C:> cl /EHsc test.cpp
C:> test.exe
true
m[1]=bbbb
m[2]=cc

我不是专家,但Microsoft Visual Studio似乎是正确的答案。这是一个非常基本的场景,所以我想知道发生了什么。我无法相信这是一个错误,我无法相信它在这样一个基本层面上与MS和GNU之间的根本分歧。我怀疑在我的配置或命令行中有什么东西。在安装默认的Ubuntu 11.10客户端和'apt-get install build-essentials'后,我得到了我的g ++编译器和头文件。

可能是我缺少的编译开关,或MS与GNU之间的根本分歧

1 个答案:

答案 0 :(得分:4)