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

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

2020-4-17 21:11
4219
我用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>



[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2020-4-17 21:11 被ezrealik编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你是怎么进行测试的啊?
2020-4-17 21:26
0
雪    币: 1370
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
limee 你是怎么进行测试的啊?
就直接调试啊.  肉眼可见的龟速...输出栏里1-3秒才输出一条结果. 一个网页总共才12条数据..  VBScript.RegExp 点一下就匹配完成了. 到c++的regex就变得很慢不知道为什么.
2020-4-17 21:42
0
雪    币: 9399
活跃值: (6047)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
你的正则表达式是OK的?我复制下来编译都通不过
2020-4-17 23:04
0
雪    币: 1370
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
sunsjw 你的正则表达式是OK的?我复制下来编译都通不过
是正确的. 我没加 [ \ ] 转义符,你直接复制不转义肯定报错啊.   而且速度和正则对不对没关系吧.  正则不对的话,直接就不匹配了. 而不是龟速匹配
我测试了下,发现正则越长速度越慢.  我把正则表达式删掉一半. 速度有提升.  
最后于 2020-4-18 01:52 被ezrealik编辑 ,原因:
2020-4-18 01:01
0
雪    币: 1855
活跃值: (6070)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
搞个工程我试试, 听说c++的正则写的不怎么样所以性能不行,但也不会不行到连vb脚本都干不过啊
2020-4-18 12:23
0
雪    币: 1370
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
值得怀疑 搞个工程我试试, 听说c++的正则写的不怎么样所以性能不行,但也不会不行到连vb脚本都干不过啊
确实比不过..... 我已经换vbscript::regexp了.    另外我上面正则是抓取 d22K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1j5Y4y4Q4x3X3f1&6x3%4S2Q4x3X3g2F1k6i4c8Q4x3V1k6H3L8s2g2Y4K9h3&6Q4x3X3g2H3K9s2m8Q4x3@1k6A6k6q4)9K6c8r3c8U0i4K6g2X3L8h3q4D9L8q4)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4c8e0S2Q4b7V1k6Q4z5e0W2Q4c8e0c8Q4b7U0S2Q4b7f1q4Q4c8e0g2Q4z5f1y4Q4b7U0m8Q4c8e0g2Q4z5f1c8Q4z5o6m8Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4z5o6k6Q4z5o6g2Q4c8e0g2Q4b7f1g2Q4b7U0W2Q4x3X3g2Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4@1f1@1i4@1u0p5i4@1p5H3i4@1f1#2i4K6S2r3i4@1q4r3i4@1f1@1i4@1u0n7i4@1p5#2i4@1f1^5i4@1q4r3i4K6V1#2i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1^5i4@1q4r3i4K6V1#2i4K6u0W2
最后于 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
雪    币: 1370
活跃值: (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
雪    币: 1370
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
limee 你是.net的正则,还是perl规则的正则?
我换vbcript的正则了. c/c++调用com.   正则我在帖子里面有的.  正则规则的话 应该.net正则吧.
2020-4-24 09:31
0
游客
登录 | 注册 方可回帖
返回