使用pcre弥补hyperscan的不足,实现hyperscan贪婪匹配

Pcre是什么

PCRE(Perl Compatible Regular Expressions)是一个功能强大的正则表达式库,提供了与Perl语言兼容的正则表达式功能。PCRE支持广泛的正则表达式语法,包括字符类、重复、分组、反向引用等,使开发者能够进行灵活而强大的模式匹配。
PCRE的特点如下:

  • 强大的正则表达式支持:PCRE支持Perl正则表达式的大部分语法和特性,包括模式修饰符、捕获组、零宽断言、贪婪模式等,使开发者能够进行复杂的字符串匹配和提取。
  • 广泛的语言支持:PCRE提供了多种编程语言的接口和封装,包括C、C++、Python、Java等,使开发者能够在各种语言环境下使用PCRE进行正则表达式操作。
    可移植性和可扩展性:PCRE易于集成到各种应用和平台中,具有良好的可移植性和可扩展性。
  • PCRE被广泛应用于文本处理、模式匹配、数据提取等各个领域。许多编程语言和工具都使用PCRE作为其正则表达式引擎的基础库。

Hyperscan是什么

hyperscan是一种高性能的多模式字符串匹配的库,用于在大规模数据集中高效地查找多个模式。它由Intel开发,旨在提供快速而灵活的正则表达式匹配功能。Hyperscan的特点包括以下几个方面:

  • 高性能:Hyperscan利用了多核处理器的并行能力,采用了高度优化的算法和数据结构,能够在大规模数据集上实现高速匹配。
  • 多模式匹配:Hyperscan支持同时匹配多个正则表达式模式,这对于需要对大量模式进行匹配的应用非常有用,如网络安全、日志分析等。
  • 定制性和灵活性:Hyperscan提供了丰富的API和工具,使用户可以根据自己的需求进行定制和扩展,如自定义回调函数、自定义内存分配等。
  • Hyperscan常用于网络安全领域,用于实时检测和过滤恶意软件、入侵行为、网络攻击等。它在高速网络设备、防火墙、入侵检测系统等方面具有广泛的应用。

Hyperscan遵循常用 libpcre 库的正则表达式语法,但它是一个具有自己的 C API 的独立库。Hyperscan 使用混合自动机技术来允许同时匹配大量(最多数万)正则表达式以及跨数据流匹配正则表达式。Hyperscan专注于高性能的正则表达式匹配,并提供了一些高级功能(如多模式匹配和流式匹配),但在贪婪匹配方面的支持较有限。

贪婪匹配通常是由正则表达式引擎处理的特性,但Hyperscan的设计目标是高性能和可扩展性,因此它采用了一种针对高速匹配的扫描算法,而不是传统的回溯算法。

Github:https://github.com/intel/hyperscan 4.4kstar

演示Demo

本文所依赖的hyperscan编译好的库文件及demo可以在此下载:https://download.csdn.net/download/vevenlcf/88328158

1. hyperscan demo:

#include 
#include 
#include "hs.h"
#include "hs_common.h"
#include "hs_compile.h"
#include "hs_runtime.h"


static int match_callback(unsigned int id, unsigned long long from, unsigned long long to,
                          

你可能感兴趣的:(开发语言,后端)