其他分享
首页 > 其他分享> > 非常基本的正则表达式方案与libstdc -v3上的预期不同

非常基本的正则表达式方案与libstdc -v3上的预期不同

作者:互联网

我得到的行为与我的预期不同(并且与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之间的根本分歧

解决方法:

&LT正则表达式&GT在libstdc中仍未实现:http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

标签:c,c11,regex,g,libstdc
来源: https://codeday.me/bug/20191013/1910973.html