hyperscan:

  编译和安装:http://www.cnblogs.com/zzqcn/p/4900643.html

  简单介绍:http://www.cnblogs.com/zzqcn/p/4898620.html

使用:正则编译-》匹配

1.编译

本次使用

hs_error_t hs_compile_ext_multi(const char * const *expressions,      // 正则表达式数组

                const unsigned *flags,             // 每个正则的flag选项,本次使用HS_FLAG_SINGLEMATCH ,可用 | 相加

                const unsigned *ids,              // 每个正则表达式的唯一编号,匹配正则后会返回这个id
                const hs_expr_ext * const *ext,        // 不知道干啥的
                unsigned elements,               // 个数

                unsigned mode,                 // 模式,按上面第二个链接介绍,本次使用HS_MODE_BLOCK
                const hs_platform_info_t *platform,      // NULL 也不知道干啥的
                hs_database_t **db,              // 编译后输出 hs_dababase_t
                hs_compile_error_t **error);          // 错误信息

hs_error_t hs_alloc_scratch(const hs_database_t *db, hs_scratch_t **scratch) ;

生成scratch临时数据,编译的时候好像没用到。根据db生成。

2.序列化和反序列化

可以把db生成文件供外部使用

API:

1)序列化:

hs_error_t hs_serialize_database(const hs_database_t *db,  //db数据

                char **bytes,          // 序列化后的数据(输出)

                size_t *serialized_length)    // 序列化后的长度(输出)

2)反序列化

hs_error_t hs_deserialize_database(const char *bytes,   //从文件中读到的序列化数据

                const size_t length,    //长度
                hs_database_t **db)   // 反序列化得到的db数据(输出)

3.匹配

生成临时数据

hs_scratch_t* g_scratch = NULL;

hs_error_t hs_err = hs_alloc_scratch(hs_db, &g_scratch); //hs_db是反序列化得到的db数据

匹配配API:

hs_error_t hs_scan(const hs_database_t *db,    //db数据

           const char *data,       //匹配母串

          unsigned length,        //长度
          unsigned flags,        // 0

           hs_scratch_t *scratch,    // 临时数据
          match_event_handler onEvent,  // 回调函数,匹配到会进入此函数

          void *userCtx)        //  传给回调函数的变量

回调函数:

typedef int (*match_event_handler)(unsigned int id,    // 匹配到的id,由编译的时候控制,用到此id。
                unsigned long long from,  // 
                unsigned long long to,   //  from和to可能是匹配到的位置信息
                unsigned int flags,     //  传入的flag吧?
                void *context);      //  参数

如果匹配到了,会得到正则的id,后边在进行操作。

一种hyperscan API使用(1)的更多相关文章

  1. 详解 UWP (通用 Windows 平台) 中的两种 HttpClient API

    UWP (通用 Windows 平台) 应用开发者在构建通过 HTTP 与 Web 服务或服务器断点交互的应用时,有多种 API 可以选择.要在一个托管 UWP 应用中实现 HTTP 客户端角色,最常 ...

  2. 五种开源API网关实现组件对比

    五种开源API网关实现组件对比     API 网关一些实现 使用一个组件时,尤其是这种比较流行的架构,组件肯定存在开源的,我们不必自己去从零开始去实现一个网关,自己开发一个网关的工作量是相当可观的, ...

  3. javaservlet处理四种常用api请求get,put,post,delete

    一般在网站搭建中servlet只需处理post,get请求便足已.本篇注重使用javaweb编写restful风格api,在servlet中对四种常用请求进行处理. 在api中对于一个请求要做的通常是 ...

  4. 一种用于 API 的查询语言-GraphQL

    GitHub地址 官网地址 中文网址

  5. 朱晔的互联网架构实践心得S2E5:浅谈四种API设计风格(RPC、REST、GraphQL、服务端驱动)

    Web API设计其实是一个挺重要的设计话题,许多公司都会有公司层面的Web API设计规范,几乎所有的项目在详细设计阶段都会进行API设计,项目开发后都会有一份API文档供测试和联调.本文尝试根据自 ...

  6. 几种部署Goku API Gateway的方式,最快一分钟可使用上网关

    本文将介绍几种部署Goku API Gateway的方式,最快一分钟可使用上为网关,详情请看全文. 什么是Goku API Gateway? Goku API Gateway (中文名:悟空 API ...

  7. 抛弃jQuery:DOM API之选择元素

    原文链接:http://blog.garstasio.com/you-dont-need-jquery/selectors/ 我的Blog:http://cabbit.me/you-dont-need ...

  8. C#计算一段程序运行时间的三种方法

    第一种方法利用System.DateTime.Now: static void SubTest() { DateTime beforDT = System.DateTime.Now; //耗时巨大的代 ...

  9. hibernate常用API详解

    根据个人使用Hibernate的经验,介绍一下Hibernate的多种不同的查询和CUD操作,这些东西在日常开发中非常常用,希望对大家有所帮助. 以下示例均以两张表为例:member和userinfo ...

随机推荐

  1. 安全基线自动化扫描、生成报告、加固的实现(以Tomcat为例)

    一.背景说明 当前在服务上线前,安全部门都会对服务基线配置进行把关,整个流程可以分为扫描.生成报告.修复三步. 在执行这一流程时当前普遍的做法是半自动化的,扫描和生成报告是自动化的,执行扫描.执行生成 ...

  2. js零碎知识汇总

    1.window.location.href 表示在当前页面打开,不会打开新窗口. window.open 表示打开新窗口. 2.<input name="action" t ...

  3. react项目搭建及webpack配置

    1,配置webpack npm install -g webpack                       webpack的cli环境 npm install -g webpack-dev-se ...

  4. MATLAB中a(:)和." ' "," ' "

    今天继续学习matlab看书时发现了一行代码 a=a(:).'; 起初可能不懂就百度一下 a(:)可以将向量转换为列向量,行向量相当于直接转置,列向量不变 而如果是n*m维向量则仍然是以列为主,即按照 ...

  5. ANG通证是什么?有关ANG通证的干货都在这里

    什么是ANG通证?▲▲▲ 通证也叫代币,是一个虚拟账户名称,是电子卡的虚拟货币.举个简单的例子,腾讯的Q币就是一种通证,我们用货币购换数个Q币,代以购买腾讯游戏里的装备等. 目前,随着加密数字通证的发 ...

  6. Python turtle安装和使用教程

    1 安装turtle Python2安装命令: pip install turtule Python3安装命令: pip3 install turtle 因为turtle库主要是在Python2中使用 ...

  7. unity中EventTrigger组件的应用

    using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using D ...

  8. day42-python消息队列一

    消息队列”是在消息的传输过程中保存消息的容器.消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不通的进程.生产者往管道中写消息,消费者从管道中读消息.操作系统提供了很 ...

  9. error #10234-D: unresolved symbols remain error #10010: errors encountered during linking;

    error #10234-D: unresolved symbols remain error #10010: errors encountered during linking;: include ...

  10. Echarts扩展地图文字位置错乱的问题

    最近在弄echarts 因为要用到扩展地图,所以在官网下载了相应的json文件 ,引入之后发现文字位置错乱 于是查找网上资料 发现 textFixed : {                      ...