Chinaunix
标题:
有人用gnu regex吗?
[打印本页]
作者:
newmax123
时间:
2012-04-05 09:56
标题:
有人用gnu regex吗?
事情是这样的,我有一个页面内容抽取的爬虫,现在用了 posix regex, 一切都好 但是cpu 非常非常高。
对此 我想用gnu regex 进行一次替代,但是否能提高速度
代码如下
const char *regex_pattern = "<a\\s{1,7}href=[^>\\']{0,300}products/[^>]{0,300}.html[^>]{0,5}>[^<]{0,300}</a>";
struct re_pattern_buffer pattern_buffer ={0};
const char *errcode;
re_syntax_options = RE_SYNTAX_POSIX_BASIC;
/* 進行編譯 Regular Expression */
int patternlen = strlen(regex_pattern); // 获得表达式长度
// 编译表达式
errcode = re_compile_pattern( regex_pattern,
patternlen,
&pattern_buffer);
// 开始search
struct re_registers regs ={0};
int lens = strlen(filestr.c_str()); // 获得原文长度
int result = re_search(&pattern_buffer,
filestr.c_str(),
lens,
0,
lens,
®s);
失败了....
同样的字符用posix 是没有问题的。那里有问题呢?
还有个问题 ,result 返回的是匹配以后的头字符,那里找到最后的结果呢?
作者:
bruceteen
时间:
2012-04-05 11:12
要想速度快,就不能用正则表达式
再说你的 "<a\\s{1,7}href=[^>\\']{0,300}products/[^>]{0,300}.html[^>]{0,5}>[^<]{0,300}</a>" 很简单
直接用 strstr 吧,还省掉引入一个外部库
作者:
newmax123
时间:
2012-04-05 11:22
我知道, 但是里面用到 regex 的不止一处, 用strstr 误判率很高很高。 因为 html 不规范的地方很多。
作者:
newmax123
时间:
2012-04-23 13:24
哥后悔了,改成string 方式 memory 从300M 降到了9M. cpu 从400% 降到3%.
作者:
walleeee
时间:
2012-04-23 13:54
原来爬虫出在这里。我还以为是前面那个,算了
不知道做这个事情不该用动态正则么?静态正则才做这个。算了
作者:
newmax123
时间:
2012-04-27 21:18
你知道爬虫只是占我整个系统里的比例是多少吗?
作者:
walleeee
时间:
2012-04-27 22:07
管你占多少,这和本问题无关。
作者:
walleeee
时间:
2012-04-27 22:07
你如果是发给我,请回复我,不然就不要和我说话
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2