hyperscan C API中stream相关接口总结

1.基本的正则表达式编译器

这是将表达式编译到Hyperscan数据库中的函数调用,该数据库可以传递给运行时函数(例如hs_scan(),hs_open_stream()等)。

hs_error_t hs_compile(const char * expression, unsigned int flags, unsigned int mode, const hs_platform_info_t * platform, hs_database_t ** db, hs_compile_error_t ** error);

说明:

  • 返回值
    • 成功编译后返回HS_SUCCESS; HS_COMPILER_ERROR失败,详细信息在error参数中提供。
  • 参数
    • expression:要解析的以NULL结尾的表达式。注意,该字符串只能表示要匹配的模式,没有定界符或标志。任何全局标志都应使用flags参数指定。例如,应通过提供abc?def作为表达式,并提供HS_FLAG_CASELESS作为标志来编译表达式/ abc?def / i。
    • flags:修改表达式行为的标志。可以通过对它们进行“或”运算来使用多个标志。有效值为:
      • HS_FLAG_CASELESS:匹配将不区分大小写
      • HS_FLAG_DOTALL:匹配一个.不会排除换行符
      • HS_FLAG_MULTILINE:^和$匹配数据中的任何换行符。
      • HS_FLAG_SINGLEMATCH:每个流的表达式将只生成一个匹配项。
      • HS_FLAG_ALLOWEMPTY:允许可以与空字符串匹配的表达式,例如.*。
      • HS_FLAG_UTF8:将此模式视为UTF-8字符序列。
      • HS_FLAG_UCP:对字符类使用Unicode属性。
      • HS_FLAG_PREFILTER:在预过滤模式下编译模式。
      • HS_FLAG_SOM_LEFTMOST:报告找到匹配项时报告最左端的匹配偏移量。
      • HS_FLAG_COMBINATION:以逻辑组合语法解析表达式。
      • HS_FLAG_QUIET:忽略此表达式的匹配报告。用于逻辑组合中的子表达式。
    • mode:影响整个数据库的编译器模式标志。必须提供HS_MODE_STREAM或HS_MODE_BLOCK或HS_MODE_VECTORED之一,以便在流式,块式或矢量数据库的生成之间进行选择。另外,可以提供其他标志(以HS_MODE_开头)以启用特定功能。有关更多详细信息,请参见编译模式标志。
    • platform:如果不为NULL,则使用平台结构来确定数据库的目标平台。如果为NULL,则生成一个适合在当前主机平台上运行的数据库。
    • db:成功时,将在此参数中返回指向生成的数据库的指针,否则将返回NULL。调用程序负责使用hs_free_database()函数取消分配缓冲区。
    • error:如果编译失败,则将返回指向hs_compile_error_t的指针,并提供错误条件的详细信息。调用者负责使用hs_free_compile_error()函数取消分配缓冲区。
  1. 多正则表达式编译器

这是将一组表达式编译到数据库中的函数调用,该表达式可以传递给运行时函数(例如hs_scan(),hs_open_stream()等)。每个表达式都可以用唯一的整数标记,该整数将被传递 插入match回调中以识别已匹配的模式。

hs_error_t hs_compile_multi(const char *const * expressions, const unsigned int * flags, const unsigned int * ids, unsigned int elements, unsigned int mode, const hs_platform_info_t * platform, hs_database_t ** db, hs_compile_error_t ** error);

说明:

  • 返回值
    • 成功编译后返回HS_SUCCESS; HS_COMPILER_ERROR失败,详细信息在error参数中提供。
  • 参数
    • expressions:要编译的以NULL结尾的表达式数组。请注意(与hs_compile()一样),这些字符串必须仅包含要匹配的模式,没有定界符或标志。例如,应通过提供abc?def作为表达式数组中的第一个字符串,并提供HS_FLAG_CASELESS作为flags数组中的第一个值来编译表达式/ abc?def / i。
    • flags:标志数组,用于修改每个表达式的行为。可以通过对它们进行“或”运算来使用多个标志。指定NULL指针代替数组会将所有模式的标志值设置为零。有效值见上面。
    • ids:一个整数数组,指定要与expressions数组中的相应模式相关联的ID号。指定NULL指针代替数组会将所有模式的ID值设置为零。
    • elements:输入数组中元素的数量。
    • mode:见上
    • platform:见上
    • db:见上
    • error:见上
  1. 具有扩展参数支持的多个正则表达式编译器

该函数调用以与hs_compile_multi()相同的方式将一组表达式编译到数据库中,但是允许通过每个表达式的hs_expr_ext_t结构指定其他参数。

hs_error_t hs_compile_ext_multi(const char *const * expressions, const unsigned int * flags, const unsigned int * ids, const hs_expr_ext_t *const * ext, unsigned int elements, unsigned int mode, const hs_platform_info_t * platform, hs_database_t ** db, hs_compile_error_t ** error)

说明:

  • 返回值
    • 见上
  • 参数
    • ext:指向填充的hs_expr_ext_t结构的指针数组,这些结构定义每个模式的扩展行为。如果单个模式不需要扩展行为,则可以指定NULL;如果任何表达式都不需要,则可以指定整个数组。这些结构使用的内存必须由调用方分配和释放。
    • 其他参数与hs_compile_multi
  1. 分配一个“临时”空间供Hyperscan使用

这对于运行时使用是必需的,并且每个线程或并发调用者需要一个暂存空间。此函数将使用hs_set_scratch_allocator()或hs_set_allocator()设置的任何分配器回调。

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

说明:

  • 返回值
    • HS_SUCCESS成功分配; HS_NOMEM,如果分配失败。如果指定了无效的参数,则可能会返回其他错误。
  • 参数
    • db:由hs_compile()生成的数据库
    • scratch:首次分配时,应提供一个指向NULL的指针,以便可以分配新的暂存器。如果先前已分配了暂存块,则应将指向该暂存块的指针传递回来,以查看该暂存块对该数据库块是否有效。如果需要新的暂存块,则将释放原始暂存块并返回新的暂存块,否则将返回先前的暂存块。成功后,除了原始暂存空间适合的任何数据库外,暂存块还将适合与所提供的数据库一起使用。
  1. 打开并初始化流
hs_error_t hs_open_stream(const hs_database_t * db, unsigned int flags, hs_stream_t ** stream);

说明:

  • 返回值
    • HS_SUCCESS成功,其他值失败。
  • 参数
    • db:编译的模式数据库。
    • flags:修改流行为的标志。提供此参数供将来使用,目前不使用。
    • stream:成功后,将返回指向生成的hs_stream_t的指针;失败时为NULL。
  1. 将要扫描的数据写入打开的流

这是函数调用,其中,实际模式匹配是在将数据写入流时发生的。匹配将通过提供的match_event_handler回调返回。

hs_error_t hs_scan_stream(hs_stream_t * id, const char * data, unsigned int length, unsigned int flags, hs_scratch_t * scratch, match_event_handler onEvent, void * ctxt);

说明:

  • 返回值
    • 成功返回HS_SUCCESS; HS_SCAN_TERMINATED,如果匹配回调指示扫描应停止;其他值错误。
  • 参数:
    • id:数据将写入的流ID(由hs_open_stream()返回)。
    • data:指向要扫描的数据的指针。
    • length:要扫描的字节数。
    • flags:修改流行为的标志。提供此参数供将来使用,目前不使用。
    • scratch:hs_alloc_scratch()分配的每线程暂存空间。
    • onEvent:指向匹配事件回调函数的指针。如果给出NULL指针,则不会返回任何匹配。
    • ctxt:用户定义的指针,在发生匹配时将传递给回调函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值