C ++的函数正则表达式在linux(CentOS)中但在OSX中遇到错误[重复]

Posted

技术标签:

【中文标题】C ++的函数正则表达式在linux(CentOS)中但在OSX中遇到错误[重复]【英文标题】:function regex of C++ meet error in linux(CentOS) but in OSX [duplicate] 【发布时间】:2016-03-04 10:14:01 【问题描述】:

我尝试编写一个程序来测试 C++ 中的正则表达式,所以我阅读并遵循标准示例,我的代码如下:

#include <stdio.h>
#include <regex>
#include <string>

using namespace std;
char var1[10] = "12345";
string var2 = "12345";

int main()

    if (regex_match( var1, regex( "\\d+" ) ) )
        printf("var1 match\n");
    else
        printf("var1 not match\n");
    
    if (regex_match( var2, regex( "\\d+" ) ) )
        printf("var2 match\n");
    else
        printf("var2 not match\n");
    

然后我运行如下命令进行编译和运行:

g++ retest.cpp -o retest -std=c++0x
./retest

但它显示以下错误:

terminate called after throwing an instance of 'std::regex_error'
  what():  regex_error
Aborted

我修改了代码,最后发现错误导致regex()中出现常规字符串。但是当我在我的 OSX 中编写相同的代码时,它可以运行并向我显示正确的结果! 我很困惑,为什么我使用标准 C++ 库,但 CentOS 和 OSX 的结果不同? 我怎么解决这个问题?谢谢!

【问题讨论】:

查看Is gcc 4.8 or earlier buggy about regular expressions 我该如何解决这个问题? > 升级到最新的 GCC 版本。 【参考方案1】:

CentOS 有相当旧的 GCC 组件。您可以在http://distrowatch.com/table.php?distribution=centos查看详细信息

在我的 CentOS 7 机器上说,

# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE

并且,&lt;regex&gt; 在 gcc 4.9.0 中实现。 https://***.com/a/12665408/3627572

【讨论】:

我的 CentOS7 是“gcc version 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)”,所以看来我必须升级我的 gcc 和 g++,但之后没有任何反应我输入“yum upgrade gcc gcc-c++” 我很困惑为什么 gcc 显示 'std::regex_error' 但此版本不支持正则表达式

以上是关于C ++的函数正则表达式在linux(CentOS)中但在OSX中遇到错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

神级程序员教你如何在C语言中巧用正则表达式,简化处理,提高效率

Linux/Centos 正则表达式

C语言正则表达式

在linux的shell语言中,怎样用正则表达式来截取字符串?

linux安装nginx

MSVC下使用gnu regex(正则表达式C语言接口regex.h)