基于(快速)签名匹配的编程库?

时间:2011-10-07 16:22:27

标签: regex pattern-matching

我已经完成了一项任务,即构建一个应用程序,该应用程序将对某些网络流量执行基于签名的匹配(在第7层)。匹配将实时执行,并且需要快速,以便系统始终保持响应性。

首先,我考虑将正则表达式用作签名,将pcre用作匹配库。但似乎这太慢了。将有几千个签名进行匹配。

由于我在基于签名的内容匹配方面没有很多经验,所以我要问:

  1. 我应该使用正则表达式作为签名并找到更快的库吗?
  2. 是否有其他快速的基于签名的匹配库(免费或商业版)?

1 个答案:

答案 0 :(得分:1)

要构建一个有效的RE匹配器,可以将其编译为具有接受和非接受状态的有限状态机。

如果您有多个RE,您可以轻松地形成它们的析取,并将其编译成具有非接受状态的FSA,以及根据哪个RE接受标记的状态。

因此,使用几千个RE,您可以计算一个巨大的析取并为该集合构建FSA。

大多数标准lexing引擎(例如FLEX)正是这样做的,每个令牌使用一个RE,并告诉你哪个令牌。所以你应该能够使用FLEX作为起点。