linux g++正则表达式不起作用

Posted

技术标签:

【中文标题】linux g++正则表达式不起作用【英文标题】:linux g++ regular expressions not working 【发布时间】:2020-06-02 06:56:37 【问题描述】:

我正在尝试在 linux g++ 上使用正则表达式查找子字符串。

例如:

    std::string logline = "Apr 19 00:55:32 localhost kernel: usb 2-2.1: SerialNumber: ABCDEFGHIJKLMNOP\n";

    std::string sn = "";
    std::regex re("SerialNumber\: (.*)\n");
    std::smatch match;
    if (std::regex_search(logline, match, re) && match.size() > 1) 
        sn = match.str(1);
    
    else
    
        sn = std::string("");
    

它也适用于 windows c++。 但 linux g++ 不起作用。 有什么问题?

【问题讨论】:

您使用的是旧版本的 gcc 吗?它曾经有一个非功能性的正则表达式实现 如前所述,如果您使用 4.8 或更早的 gcc 版本,那么这就是您的问题的原因,因此请先检查您的 gcc 版本。 是的。使用的 gcc 版本是 4.8.2。 【参考方案1】:

在“:”之前不需要“\”。所以正确的行是: std::regex re("SerialNumber: (.*)\n"); 通过此更改,您的代码可与 gcc 开始 gcc 4.9.1 一起使用。 https://wandbox.org/permlink/uuVCxdtpHAjZTghP

【讨论】:

感谢您的帮助。更新了 gcc 版本 4.9.1,它也可以正常工作。【参考方案2】:

<regex> 在 GCC 4.9.0 中实现并发布,因此请检查您的 gcc 版本并查看以下示例:

#include <regex> //header  file for regex
#include <iostream>

int main(int argc, const char * argv[])
    std::regex r("ab|bc|cd");
    std::cerr << "ab|bc|cd" << " matches ab? " << std::regex_match("sab", r) << std::endl;
    return 0;

输出:

ab|bc|cd matches ab? 1

【讨论】:

请在您的答案中格式化文本。现在几乎看不懂了。 嗨卡皮尔。当您收到改进答案的请求时,请考虑回复该请求。在这里,可读性对我们很重要 - 帖子不仅适用于个别问题作者,也适用于每位未来的读者。 当然,以后写任何答案时我都会牢记在心。

以上是关于linux g++正则表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Postgres 正则表达式替换不起作用

正则表达式的replace不起作用?

oracle 正则表达式?=

如何将正则表达式捕获存储在 Perl 的数组中?

为啥正则表达式不起作用

Notepad++ 正则表达式替换 - \1 不起作用?