首页
社区
课程
招聘
未解决 [求助]为什么C++ Regex正则匹配是龟速
发表于: 2020-4-17 21:11 3910

未解决 [求助]为什么C++ Regex正则匹配是龟速

2020-4-17 21:11
3910
我用Regex获取一个网页内容,编译型是Debug. 不管是调试还是单独运行. 都是龟速匹配. 一个普通的网页要匹配一分钟以上....

     std::regex pattern(pText);
	std::smatch reg_result;
	std::string::const_iterator iterStart = Result.begin();
	std::string::const_iterator iterEnd = Result.end();
	while (regex_search(iterStart, iterEnd, reg_result, pattern)) {
		iterStart = reg_result[0].second;
		std::string tmpstr = reg_result[2];
		OutputDebugStringA(tmpstr.c_str());
		OutputDebugStringA("\n");
	}

正则表达式:
<li\s+onmouseover=["'].+["']\s+onmouseout=["'].+["']>\s+<div\s+class=["'].+["']>\s+<div\s+class=["']img["']>\s+<a\s+href=["'](.+)["']\s+title=["'](.+)["']><img\s+src=["'](.*)["']\s+alt=["'].+["']\s+onerror=["']this.src=["'].+["']["']></a>\s+</div>\s+<div\s+style=["'].+["']\s+id=["'].+["']\s+class=["'].+["']>\s+<div>\s+.+<em>\d+</em>.+<br>\s+.+<em>\d+</em>.+<br>\s+.+<em>\d+</em>.+<br>\s+</div>\s+</div>\s+</div>\s+<div\s+class=["'].+["']>\s+<div\s+class=["'].+["']><a\s+href=["']\S+["']\s+title=["'].+["']>.+</a></div>\s+<div>.+<span\s+style=['"].+['"]>(\d+)</span>(.+)</div>\s+<div>.+<span\s+style=['"].+['"]>(\d+)</span>(.+)</div>\s+</div>\s+</li>



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-4-17 21:11 被ezrealik编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你是怎么进行测试的啊?
2020-4-17 21:26
0
雪    币: 1570
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
limee 你是怎么进行测试的啊?
就直接调试啊.  肉眼可见的龟速...输出栏里1-3秒才输出一条结果. 一个网页总共才12条数据..  VBScript.RegExp 点一下就匹配完成了. 到c++的regex就变得很慢不知道为什么.
2020-4-17 21:42
0
雪    币: 8595
活跃值: (5055)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
你的正则表达式是OK的?我复制下来编译都通不过
2020-4-17 23:04
0
雪    币: 1570
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
sunsjw 你的正则表达式是OK的?我复制下来编译都通不过
是正确的. 我没加 [ \ ] 转义符,你直接复制不转义肯定报错啊.   而且速度和正则对不对没关系吧.  正则不对的话,直接就不匹配了. 而不是龟速匹配
我测试了下,发现正则越长速度越慢.  我把正则表达式删掉一半. 速度有提升.  
最后于 2020-4-18 01:52 被ezrealik编辑 ,原因:
2020-4-18 01:01
0
雪    币: 2305
活跃值: (4543)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
搞个工程我试试, 听说c++的正则写的不怎么样所以性能不行,但也不会不行到连vb脚本都干不过啊
2020-4-18 12:23
0
雪    币: 1570
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
值得怀疑 搞个工程我试试, 听说c++的正则写的不怎么样所以性能不行,但也不会不行到连vb脚本都干不过啊
确实比不过..... 我已经换vbscript::regexp了.    另外我上面正则是抓取 https://bbs.93x.net/plugin.php?id=dc_mall 这个地址的内容. 你可以试一试.
最后于 2020-4-18 12:56 被ezrealik编辑 ,原因:
2020-4-18 12:49
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
ezrealik 值得怀疑 搞个工程我试试, 听说c++的正则写的不怎么样所以性能不行,但也不会不行到连vb脚本都干不过啊 确实比不过..... 我已经换vbscript ...
西加加这么弱吗,用c语言来匹配呢?
2020-4-18 15:11
0
雪    币: 1570
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
limee 西加加这么弱吗,用c语言来匹配呢?
C语言那个没用过. 听说速度很快.  我也不知道C++弱不弱.我也就入门新手.  不过C++正则确实不太好用(个人感觉)
最后于 2020-4-18 17:51 被ezrealik编辑 ,原因:
2020-4-18 17:50
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
ezrealik limee 西加加这么弱吗,用c语言来匹配呢? C语言那个没用过.&nbsp;听说速度很快.&nbsp; 我也不知道C++弱不弱.我也就 ...
你的正则表达贴一下,我有空用delphi测试一下速度。
你的问题解决了吗?
2020-4-23 09:11
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
ezrealik limee 西加加这么弱吗,用c语言来匹配呢? C语言那个没用过.&nbsp;听说速度很快.&nbsp; 我也不知道C++弱不弱.我也就 ...
你是.net的正则,还是perl规则的正则?
2020-4-23 09:15
0
雪    币: 1570
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
limee 你是.net的正则,还是perl规则的正则?
我换vbcript的正则了. c/c++调用com.   正则我在帖子里面有的.  正则规则的话 应该.net正则吧.
2020-4-24 09:31
0
游客
登录 | 注册 方可回帖
返回
//