2 Star 6 Fork 3

qazxlf / NetSurveyW

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Pcre.cpp 1.50 KB
一键复制 编辑 原始数据 按行查看 历史
#include "Pcre.h"
#include <stdio.h>
Pcre::Pcre()
{
error=0;
re_arr.clear();
patten_name.clear();
}
Pcre::~Pcre()
{
for(int i=0; i<re_arr.size(); i++)
{
pcre_free(re_arr[i]);
}
}
int Pcre::AddRule(const std::string &name, const std::string &patten)
{
pcre *re = pcre_compile(patten.c_str(), PCRE_MULTILINE|PCRE_UTF8|PCRE_NO_AUTO_CAPTURE, (const char**)&error, &erroffset, NULL);
if(re == NULL)
{
printf("pcre compile failed, offset %d: %s\n", erroffset, error);
return -1;
}
else
{
re_arr.push_back(re);
patten_name.push_back(name);
return 0;
}
}
void Pcre::ClearRules()
{
for(int i=0; i<re_arr.size(); i++)
{
pcre_free(re_arr[i]);
}
{
std::vector<pcre*> tmp;
re_arr.swap(tmp);
}
{
std::vector<std::string> tmp;
patten_name.swap(tmp);
}
//re_arr.clear();
//patten_name.clear();
}
std::vector<MatchResult> Pcre::MatchAllRule(const char content[])
{
std::vector<MatchResult> result_arr;
int length = strlen(content);
char buf[2048];
for(int i=0; i<re_arr.size(); i++)
{
MatchResult result;
result.name = patten_name[i];
int cur = 0;
int rc;
while(cur<length && (rc = pcre_exec(re_arr[i], NULL, content, length, cur, PCRE_NOTEMPTY, ovector, VECSIZE)) >= 0)
{
for(int j=0; j<rc; j++)
{
memset(buf, 0, sizeof(buf));
strncpy(buf, content+ovector[2*j], ovector[2*j+1]-ovector[2*j]);
result.value.push_back(buf);
}
cur = ovector[1];
}
if(result.value.size() > 0)
result_arr.push_back(result);
}
return result_arr;
}
C++
1
https://gitee.com/xulongfei0612/NetSurveyW.git
git@gitee.com:xulongfei0612/NetSurveyW.git
xulongfei0612
NetSurveyW
NetSurveyW
master

搜索帮助