首页
社区
课程
招聘
[求助]C++正则表达式求助
发表于: 2019-1-28 23:45 3439

[求助]C++正则表达式求助

2019-1-28 23:45
3439
正在写一个模拟器的管理工具,需要根据模拟器进程的返回拆分字符串并且添加到结构体中保存,
模拟器返回格式如下
0,雷电模拟器,0,0,0,-1,-1\r\n1,雷电模拟器-1,0,0,0,-1,-1\r\n2,雷电模拟器-2,0,0,0,-1,-1\r\n3,雷电模拟器-1-3,0,0,0,-1,-1\r\n4,雷电模拟器-4,0,0,0,-1,-1\r\n5,雷电模拟器-1-5,0,0,0,-1,-1\r\n
这是我测试用的正则表达式,在测试工具中测试通过
(?<=^|,|\\r\\n).*?(?=,|\\r\\n)
C++测试代码如下
#include "pch.h"
#include <regex>
#include <iterator>
#include <iostream>
#include <string>
 
int main()
{
    const std::string s = "0,雷电模拟器,0,0,0,-1,-1\r\n1,雷电模拟器-1,0,0,0,-1,-1\r\n2,雷电模拟器-2,0,0,0,-1,-1\r\n3,雷电模拟器-1-3,0,0,0,-1,-1\r\n4,雷电模拟器-4,0,0,0,-1,-1\r\n5,雷电模拟器-1-5,0,0,0,-1,-1\r\n";
 
    std::regex words_regex("(?<=^|,|\\r\\n).*?(?=,|\\r\\n)");
    auto words_begin =
        std::sregex_iterator(s.begin(), s.end(), words_regex);
    auto words_end = std::sregex_iterator();
 
    std::cout << "Found "
        << std::distance(words_begin, words_end)
        << " words:\n";
 
    for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
        std::smatch match = *i;
        std::string match_str = match.str();
        std::cout << match_str << '\n';
    }
}
经过测试发现,只要去掉(?<=)零宽度正回顾后发断言就可以正常运行,否则就会报错?
求大神解救

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

引擎之间差异蛮大的感觉, 这个式子 pcre 应该没啥问题.

 

你这个需求的话直接试试:

    std::regex words_regex("[^\\r\\n,]+");

好像没必要环视.

2019-1-29 00:12
0
雪    币: 224
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
junkboy 引擎之间差异蛮大的感觉, 这个式子 pcre 应该没啥问题. 你这个需求的话直接试试: ``` std::regex words_regex("[^\\r\\n,]+ ...
这样确实可以,但是心里还是过不去,难道C++不支持(?<=exp)?  百思不得其解
2019-1-29 00:15
0
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

虽然可能无法接受, 但也许也很正常, 正则各语言各引擎之间差异很大. JavaScript 也是有的版本不支持这种 逆序肯定环视.

 

换个库就好...

最后于 2019-1-29 01:10 被junkboy编辑 ,原因:
2019-1-29 00:51
0
雪    币: 224
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
junkboy 虽然可能无法接收, 但也许也很正常, 正则各语言各引擎之间差异很大. JavaScript 也是有的版本不支持这种 **逆序肯定环视**. 换个库就好...
大概就是这个问题了,C++默认用的是JavaScript的语法 万分感谢!
2019-1-29 00:53
0
游客
登录 | 注册 方可回帖
返回
//