C++使用正则表达式出现错误

我要提取这个:20110604-092737<\INFO :0xb7f2a6d0>

但是代码总是出现如下错误:
图片说明

代码如下:

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

int main()
{
    std::string str = "20110604-092737<INFO :0xb7f2a6d0>: Player logout: 忘了爱过谁";
    std::regex rgx("^[\\d\\-\\d\\<\\w\\s{0,1}\\:\\w>]");
    std::smatch result;
    if (std::regex_search(str, result, rgx))
    {
        std::cout << result.str();
    }

}

4个回答

在vc2010下运行通过,这个更简洁:

    std::regex rgx("^\\d*-\\d*<\\w*\\s{0,1}:\\w*>");

qq_27183003
ysuwood 回复caozhy: 楼主意图还是很明显的,按他写的格式能看出来。
接近 5 年之前 回复
qq_27183003
ysuwood 楼主意图还是很明显的,按他写的格式能看出来。
接近 5 年之前 回复
caozhy
回答这么多问题就耍赖把我的积分一笔勾销了 否则std::regex rgx(".*");岂不是更简洁
接近 5 年之前 回复
caozhy
回答这么多问题就耍赖把我的积分一笔勾销了 其实无所谓简洁不简洁。关键是lz只给了一组测试数据。正则的目的是既要以最简单的方式得到数据,同时又要防止抓取不相干的数据。所以必须对lz的数据给一些必要的假设。归根结底是lz提问不良。
接近 5 年之前 回复

正则就没有写对

 \\d{8}\\-\\d{6}\\<\\\\INFO\\s\\:0x[0-9a-fA-F]{8}\\>
    std::regex rgx("^[\\d]*[-][\\d]*[<][\\w]*[\\s{0,1}][:][\\w]*[>]");

现学现卖,最后就这样了:

    std::regex rgx("\\d*-\\d*<\\w* :\\w*>");

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问