用于大规模正则表达式匹配的双dfa分解的制作方法

文档序号:7849232阅读:226来源:国知局
专利名称:用于大规模正则表达式匹配的双dfa分解的制作方法
技术领域
本公开涉及一种正则表达式处理。具体而言,本公开涉及用于将输入串与正则表达式匹配的设备和方法。
背景技术
可以使用正则表达式集合匹配定位与正则表达式匹配的给定输入串的子串的全部出现。在若干应用中,例如病毒扫描和入侵检测中,广泛使用了精确集合匹配,也称为关键字匹配或关键字扫描。但是,基于关键字的方法仅允许定义静态的关键字。入侵检测软件和病毒扫描程序可以使用正则表达式(regex)来捕获更精确的信息并执行深度包扫描。正则表达式是定义搜索匹配输入串时使用的模式的一串符号(例如字 符、字母和数字)。正则表达式和输入串使用的符号是从符号集合,即所谓的正则表达式的字母表中提取的。深度包检查实现了高级安全功能以及因特网数据挖掘、窃听和审查。由于网络速度和网络威胁,例如病毒、恶意软件(malware)和网络攻击的组合增加,对执行深度包检查的应用的处理需求越来越多。正则表达式可用于表达模式族。将输入数据与正则表达式的集合匹配可能是非常复杂的任务,并且很大程度上取决于正则表达式中实施的特征。有几种不同形式的技术可用,每种都构建于“更简单的语法”的特征之上并且增加更多的特征。几种程序设计语言(例如,peri)直接提供了正则表达式支持,以在处理文本分析时减轻程序员的任务。可以在高级解析器生成器中使用扩展的上下文无关文法(即,具有正则表达式的上下文无关文法)。防病毒软件可以使用正则表达式扫描文件和数据中的病毒签名。基因组研究人员需要匹配脱氧核糖核酸(DNA)碱基序列和它们数据中的模式。尽管可以利用关键字搜索非常基本的模式,但更高级的模式需要能够表达更一般模式的构造。一种方法通过从表达式集合构建确定性有限自动机(DFA)或非确定性有限自动机(NFA)来处理正则表达式,然后模拟这些有限自动机(也称为有限状态自动机或状态机)的执行。DFA是对于每种状态和对应输入仅存在一种到达后继状态的转变的状态机。相反,NFA是对于每种状态和对应输入可能存在若干可能后继状态的状态机。在理论上,DFA和NFA可以在线性时间中运行。DFA方法的一个主要问题是难以记住其当前在匹配特定模式,这迫使进行完全状态扩展,从而导致指数的存储器要求。DFA方法必须为针对每种可能的模式实例的每种可能的部分匹配使用单独的状态,由此导致指数的存储器要求。另一个主要问题是难以对转变或符号进行计数,这再次迫使每种替代方案的完全扩展,从而再次导致指数的空间要求。某种现有技术采用了状态压缩技术,连同增加存储器或历史缓冲器。以运行时的搜索过程可能在其每次进入状态时执行几种操作在DFA进入最终状态时,运行时可能进行测试以验证匹配;并且尽管测试可以使用单指令、多数据(SIMD)指令,但可以在关键路径中增加了几个指令。SIMD指令是同时对多于一个数据输入精确应用相同操作的中央处理单元(CPU)指令。NFA方法可能需要每一个输入字符多于一次状态遍历,因此在实践中可能很慢,并且可能需要大量的历史存储器。此外,NFA方法是非确定性的,这可能导致利用回溯进行模拟需要指数的时间,或在每次转变之后对每种可能输出状态进行编码需要指数的空间。于是,除非对于非常简单的正则表达式或小的正则表达式集合,这种现有技术方法是不可行的。为了克服这些困难并获得匹配速度,一些研究人员着手研究了该问题,每一个研究人员都从不同的方向进行着手。解决该问题的技术的示例是-压缩DFA或NFA匹配状态的机制;-在模拟DFA或NFA时使用比特级别的并行性的机制;-减少可用算子以具有控制状态爆炸的更简单的形式;-修改匹配语义(例如仅匹配最短的串或避免匹配Kleene闭包内部的表达式)以 控制状态爆炸;-将正则表达式集合分成不同的子集,以保持状态爆炸在控制之下(并得到多个并行的状态机);-修改DFA形式以在曲线图中编码更多信息并减少空间需求(例如,延迟的输入DFA);-将DFA分成“快速部分”和“慢速部分”,其中快速部分匹配正则表达式的开头,并且最终触发慢速部分(称为分叉模式匹配);.向DFA添加匹配历史,这将允许对DFA边缘使用条件(基于历史的DFA_H_FA);以及-向基于历史的DFA增加计数器以允许识别基于符号数量的条件(基于历史的计数 DFA (H-cFA))。因此,本领域中需要解决上述问题。

发明内容
从第一方面看,本发明提供了一种根据权利要求I所述的用于在数据处理系统中将第一输入串和第一正则表达式集合匹配的设备。优选地,本发明提供了一种进一步包括输出部件的设备,所述输出部件用于响应于所述检查部件提供多个已验证的结果,验证所述多个已验证的结果并用于提供完全验证的匹配。优选地,本发明提供了一种设备,其中所述第一字母表包括多个符号集,且其中所述分析部件还可操作用于将符号集的每一个映射到一个或多个被映射的符号;以及响应于映射符号集的每一个,确定第二字母表,其中所述第二字母表包括被映射的符号的每一个。优选地,本发明提供了一种设备,其中所述设备还包括用于接收所述第一正则表达式集合的接收部件;并且响应于所述接收部件接收所述第一正则表达式集合,所述分析部件还可操作用于分析所述第一正则表达式集合以确定第二字母表。优选地,本发明提供了一种设备,其中所述第一状态机和所述第二状态机中的至少一个是确定性的。优选地,本发明提供了一种设备,其中所述第一状态机和所述第二状态机中的至少一个还包括至少一个无条件的最终状态,且其中所述设备还包括所述比较部件,进一步可操作用于评估所述至少一个无条件的最终状态;和所述检查部件,用于响应于所述至少一个无条件的最终状态是活动的,提供已验证的结果。从第四方面看,本发明提供了一种根据权利要求7所述、用于在数据处理系统中将第一输入串和第一正则表达式集合匹配的方法。优选地,本发明提供了一种方法,其中该方法还包括,响应于提供多个已验证的结果,验证所述多个已验证的结果并提供完全验证的匹配。优选地,本发明提供了一种方法,其中所述第一字母表包括多个符号集,且其中所述方法还包括将符号集的每一个映射到一个或多个被映射的符号;以及响应于映射符号集的每一个,确定第二字母表,其中所述第二字母表包括被映射的符号的每一个。优选地,本发明提供了一种方法,其中该方法还包括接收所述第一正则表达式集 合;以及响应于接收所述第一正则表达式集合,分析所述第一正则表达式集合以确定第二字母表。优选地,本发明提供了一种方法,其中所述第一状态机和所述第二状态机中的至少一个是确定性的。优选地,本发明提供了一种方法,其中所述第一状态机和所述第二状态机中的至少一个还包括至少一个无条件的最终状态,且其中所述方法还包括访问所述至少一个无条件的最终状态;以及响应于所述至少一个无条件的最终状态是活动的,提供已验证的结
果O从另一方面看,本发明提供了一种用于在数据处理系统中将第一输入串和第一正则表达式集合匹配的计算机程序产品,其中所述第一正则表达式集合包括来自第一字母表的符号,且其中所述数据处理系统包括网络,所述计算机程序产品包括计算机可读存储介质,所述计算机可读存储介质可以由处理电路读取并存储指令,所述指令用于由处理电路执行,以执行用于执行本发明的步骤的方法。从另一方面看,本发明提供了一种存储于计算机可读介质上并可加载到数字计算机的内部存储器中的计算机程序,包括软件代码部分,当所述程序运行于计算机上时,用于执行本发明的步骤。从另一方面看,本发明提供了一种用于将第一输入串与第一正则表达式集合匹配的设备。数据处理系统包括处理器、存储计算机程序的存储器,处理器配置成执行计算机程序。计算机程序包括用于执行将所述第一正则表达式集合的至少两个相关符号映射到唯一符号、通过用所述唯一符号替代所述第一输入串中至少两个相关符号的每一个实例来产生第二输入串、以及对所述输入串操作第一状态机并对第二输入串操作第二状态机以确定所述第一输入串是否与所述第一正则表达式集合匹配的指令。所述第一状态机可以包括至少一个第一有条件的最终状态,所述第二状态机可以包括至少一个第二有条件的最终状态,每一个第一有条件的最终状态可以对应于至少一个第二最终状态。当所述第一状态机处在有条件的最终状态并且所述第二状态机处于对应的有条件的最终状态时,可以确定匹配。所述第一状态机和所述第二状态机中的至少一个还可以包括至少一个无条件的最终状态。该设备还可以包括网络,其中数据处理系统跨越网络接收第一输入串。所述第一状态机和所述第二状态机中的至少一个可以是确定性的。可以分别并行地向第一状态机和第二状态机中输入第一输入串和第二输入串。所述第二状态机可以是从第二表达式集合构建的,所述第二表达式集合是通过用唯一符号替代所述第一正则表达式集合中至少两个相关符号的每一个实例产生的。所述第一状态机可以是从第三表达式集合构建的,所述第三表达式集合是通过重写所述第一表达式集合的至少一个表达式以减小至少一个表达式的状态数量来产生的。当所述第一正则表达式集合的正则表达式包括闭包算子、重复算子或可选算子时,可以用所述第三正则表达式集合替代所述第一正则表达式集合,所述第三正则表达式集合等效于所述第一正则表达式集合,但排除所述算子。从另一方面看,本发明提供了一种根据本发明的示范性实施例的用于在数据处理系统中将第一输入串和第一正则表达式集合匹配的方法,包括确定在第一正则表达式集 合中表示的不重叠的符号集的最小集,将不重叠的符号集分别映射到新符号,通过重写第一正则表达式集合以消除导致状态机复杂性的分量来产生第二正则表达式集合,通过用对应的新符号替代第一正则表达式中表达式中的符号集来产生第三正则表达式集合,利用从第二正则表达式集合构建的第一状态机以及从第三正则表达式集合构建的第二状态机确定第一输入串是否匹配第一正则表达式。所述最终状态可以是有条件的或无条件的。所述不重叠的符号集中的至少一个可以仅包括至少两个字母或不重叠的符号集中的至少一个可以仅包括至少两个数字。所述第一输入串可以是由所述数据处理系统跨越网络接收的。所述第一状态机和所述第二状态机中的至少一个可以是确定性的。可以分别并行地向第一状态机和第二状态机中输入第一输入串和第二输入串。确定第一输入串是否匹配第一正则表达式可以包括通过用对应的新符号替代第一输入串中的表达式中的符号集来产生第二输入串,对第一输入串操作第一状态机,对第二输入串操作第二状态机,以及基于第一状态机和第二状态机的输出确定匹配。确定匹配可以包括当所述第一状态机输出的状态为最终状态且所述第二状态机输出的状态为对应的最终状态时,指示匹配。确定匹配可以包括当第一或第二状态机之一输出的状态为初始状态时,确定不匹配。


现在将参考以下附图中所示的优选实施例,仅以举例方式描述本发明图I是示出根据现有技术的并且其中可以实施本发明的优选实施例的数据处理系统的框图;图2是示出了根据现有技术的状态机系统的框图;图3是示出了根据本发明的优选实施例的为匹配输入串与正则表达式而执行的设备的操作方法步骤的高级示范性示意流程图;图4是示出了可以实施本发明的优选实施例的设备的框图;图5是示出了设备的转换部件的框图;图6是示出了设备的搜索部件的框图;图7是根据本发明的优选实施例的示范性状态机框图;以及
图8示出了能够实施根据本发明的实施例的方法和系统的计算机系统的示例。
具体实施例方式要理解的是,可以通过硬件、软件、固件、专用处理器或其组合的各种形式实现这里所述的系统和方法。具体而言,优选将本发明的至少一部分实现为包括程序指令的应用,程序指令有形地包含于一个或多个计算机可读介质(即,程序存储装置,例如硬盘、软磁盘、RAM、R0M、⑶ROM等,并且可以由任何装置或包括适当架构的机器执行,例如具有处理器、存储器和输入/输出接口的通用数字计算机)上。进一步要理解,因为优选在软件中实现附图中所示的组成系统部件和过程步骤中的一些,所以系统模块(或方法步骤的逻辑流)之间的连接可能根据对本发明编程的方式而不同。给定这里的教导,本领域普通技术人员将能够想到本发明的这些和类似的实施方式。本领域的技术人员将认识到,可以将本发明的各方面实现为系统、方法或计算机程序产品。因此,本发明的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或组合软件和硬件方面的实施例形式,这里可以将所有这些通称为“电 路”、“模块”或“系统”。此外,本发明的各方面可以采取计算机程序产品的形式,计算机程序产品包含在一个或多个计算机可读介质中,计算机可读介质上包含计算机可读程序代码。可以利用一个或多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读存储介质。计算机可读存储介质可以是,例如,但不限于电子、磁、光、电磁、红外或半导体系统、设备或装置,或以上的任何适当组合。计算机可读存储介质的更具体示例(非穷举列表)将包括如下具有一个或多个线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPR0M或闪速存储器)、光纤、便携式光盘只读存储器(CD-ROM)、光存储装置、磁存储装置或以上的任何适当组合。在本文的背景下,计算机可读存储介质可以是任何有形介质,能够包含或存储供指令执行系统、设备或装置使用或结合它们使用的程序。可以利用任何适当的介质,包括,但不限于无线、有线、光纤缆线、RF等或以上的任何适当组合来传输计算机可读介质上包含的程序代码。可以用一种或多种程序设计语言的任何组合编写用于执行本发明各方面的操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言,例如Java、Smalltalk、C++等,以及常规的过程程序设计语言,例如“C”程序设计语言或类似的程序设计语言。程序代码可以完全在用户计算机上、部分在用户计算机上、作为独立的软件包、部分在用户计算机上而部分在远程计算机上,或完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络连接到用户的计算机,网络包括局域网(LAN)或广域网(WAN),或可以建立到外部计算机(例如利用因特网服务提供商通过因特网)的连接。下面参考根据本发明实施例的方法、设备(系统)和计算机程序产品的流程示和/或框图描述本发明的各方面。将要理解,可以由计算机程序指令实施流程示和/或框图的每一个块或流程示和/或框图中块的组合。可以向通用计算机、专用计算机或其他可编程的数据处理设备的处理器提供这些计算机程序指令以产生机器,使得计算机或其他可编程的数据处理设备的处理器执行的指令生成用于实施流程图和/或框图块或多个块中指定的功能/动作的装置。这些计算机程序指令也可以存储在计算机可读介质中,它们能够指示计算机、其他可编程的数据处理设备或其他装置以特定方式工作,使得计算机可读介质中存储的指令产生一种制品,所述制品包括实施流程图和/或框图块或多个块中指定的功能/动作的指令。计算机程序指令也可以被加载到计算机、其他可编程的数据处理设备或其他装置上,以导致在计算机、其他可编程的设备或其他装置上执行一系列操作步骤,以产生计算机实施的过程,使得计算机或其他可编程的设备上执行的指令提供用于实施流程图和/或框图块或多个块中指定的功能/动作的过程。图中的流程图和框图示出了根据本发明各实施例的系统、方法和计算机程序产品的可能实施方式的架构、功能和操作。就此而言,流程图或框图中的每一个块可以代表模块、片段或代码部分,其包括用于实施指定的逻辑功能的一个或多个可执行指令。还应当指出,在一些替代实施方式中,块中指出的功能可以不按照图中所示的次序发生。例如,相继示出的两个块实际上可以基本同时执行,或者根据涉及的功能,有时可以按照相反的次序执行块。还要指出,可以由执行指定的功能或动作的基于专用硬件的系统或专用硬件和计算机指令的组合来实施框图和/或流程示的每一个块及框图和/或流程示的块的 组合。图I是示出其中可以实施本发明的示范性实施例的数据处理系统100的框图。数据处理系统100的示例是因特网。客户端应用130可以工作于数据处理系统100上,数据处理系统包括工作站120和服务器150和152。工作站120和服务器可通过网络114连接,网络114可以包括有线网络110。服务器152可以是名称服务器152,也可以连接到网络114。名称服务器152将统一资源定位符(URL)翻译成互联网协议(IP)地址。客户端应用130从可以工作于服务器150上的服务器应用160接收消息140 (例如电子邮件)。消息140可能包含包括串作为签名的病毒。客户端应用130分析消息140以将消息140的串与已知病毒签名比较。该比较可以通过将串与表示签名的正则表达式(regex)匹配来进行。图2是示出了示范性状态机系统200的框图。状态机220代表正则表达式(regex)“A[a_z]C”。该正则表达式表示字母“A”后面跟着任何小写字母“a”到“z”,接着是字母“C”。状态机系统200将输入串205 (例如通过网络114接收的)与正则表达式比较。将输入串205 —次一个符号地馈送到状态机系统200的输入部件210中。状态机220包括四种状态起始状态S-INIT-1、第二状态S-A、第三状态S-B和第四状态S-FINAL。状态机220接受任何字母。开始时,状态机220处于状态S-INIT-I中。当状态机220处在状态S_INTI_1时,接下来输入“A”将状态移动到状态S-A,但接下来输入除“A”之外的任何字母都使状态保持在状态S-INTI-I。在状态S-A下,接下来输入小写字母将状态移动到S-B,但接下来输入除小写字母之外的任何字母都使状态返回状态S-INIT-I。在状态S-B,接下来输入“C”将状态移动到状态S-FINAL,但接下来输入除“C”之外的任何字母都使状态返回S-INIT-1。状态之间带箭头标记的线表示对于标记中指定的输入字符,状态之间的转变。状态改变回状态S-INIT-I被定义为“失败”转变。输出部件230检查状态机220是否处在最终状态S-FINAL。例如,在向状态机220中馈入输入串205 “AbC”之后,状态机将处在状态S-FINAL中。于是,输出部件230输出“真”结果235以指示存在匹配。但是,在向状态机220中馈入输入串205 “XYZ”之后,然后状态机将处在状态S-INIT-I中。于是,输出部件230输出“假”结果235以指示不存在匹配。在另一个示例中,字母表可以扩展到单个数字。更复杂的正则表达式包括闭包算子,以描述可选的匹配串。例如,闭包算子描述在前变量的可选出现次数,最少零次出现。因此,输入串205 “AC”、“AbC”、“AbbC”全都匹配正则表达式“A[a-z]*C”。正闭包算子“ + ”描述在前变量的可选出现次数,最少一次出现。因此,输入串205 “AbC”、“AbbC”全都匹配正则表达式“A[a-z]+C”,但输入串205 “AC”不匹配。但是,诸如[a_z]的字符集,尤其是具有诸如“ * ”的算子,增加了对应状态机的复杂性。正则表达式还可以包括关键字和锚算子。关键字是总体上对程序设计语言而言有意义的词,例如“打印”。
可以将多于一个正则表达式组合成正则表达式集合,使得输入串能够匹配该集合的任何组成正则表达式。正则表达式可以包括某一范围或有限范围的不同的字符集。例如,分析文本的表达式通常使用诸如以下集合数字、小写字母、大写字母、标点和这些集合的组合。下面将结合图4、图5、图6和图7描述图3。图3是示出了根据本发明的示范性实施例的为将输入串440与正则表达式集合405匹配而执行的操作方法步骤的示范性高级流程图300。方法步骤可以由设备408执行。输入串440可以通过网络114接收,从本地存储器加载等。图4是示出了根据本发明示范性实施例的设备408的框图400。图5是示出了根据本发明的示范性实施例的设备408的转换部件410的框图500。图6是示出了根据本发明的示范性实施例的设备408搜索部件450的框图600。图7是根据本发明的示范性实施例的状态机框图700。将图3作为逻辑流程图进行阐述。因而,图示的次序和标记的步骤表示本方法的至少一种示范性实施例。但是,可以想到在功能、逻辑或效果上与图示方法的一个或多个步骤或其部分等效的其他步骤和方法。此外,提供所采用的格式和符号以解释方法的逻辑步骤并被理解为不限制方法的范围。使用下面的示例来例示本发明的示范性实施例。在该示例中,初始正则表达式集合405包括第一正则表达式初始串_1 “Alpha[A-A] * beta”和第二正则表达式初始串_2“GAMMA
+delta”。初始正则表达式集合405包括来自第一字母表的符号。例如,第一字母表可以包括小写字母“a”- “z”,大写字母“A”- “Z”,和数字“O”- “9”。为了进一步例示该示例,考虑两个其他输入串440,其包括第一初始串_l“GAMMA2delTA”和第二初始串 _2 “SALVE7delTA”。该方法开始于步骤301。在步骤305,转换部件410的接收部件506接收初始正则表达式集合405。在步骤316,分析部件515通过检查初始正则表达式集合405中使用的第一符号字母表(例如“A”、“9”、“e”)来分析初始正则表达式集合405,以确定初始正则表达式集合405中表示的不重叠的符号集的最小集。该分析例如通过分析初始正则表达式集合405中所有使用的符号集,使每一个符号集与每一个其他符号集相交以确定将表示所有可能输入符号的不重叠的符号集来进行。在本示例中,将所需的不重叠的符号集识别为[a_z]、[A_Z]和
。然后将不重叠的符号集映射到三个新符号[例如α、β和Y],使得将[Α-Ζ]映射到α,[a-z]映射至IJ β,
映射到[γ]0定义符号集字母表“alphabet_2”418,其包括表示使用的第一字母表的符号集的新符号。在步骤318,更新部件516将初始正则表达式集合405重写为两个等效的正则表达式集合REGEX_2517和REGEX_3518。表达式集合REGEX_2517包括使用第一字母表的符号的初始正则表达式集合405,从而消除了造成状态机复杂性的分量(例如,闭包算子“ * ”和“ + ”、可选算子“?”和重复算子“ {n;m} ”)。可选算子“? ”表示子表达式是可选的,并且重复算子“ {n;m} ”表示子表达式必须存在至少“η”次且至多“m”次。可以省略任一个数字,“η”默认为无界的,并且“m”默认为无界的。因此,表达式集合REGEX_2变为第一正则表达式“Alpha”、第二正则表达式“beta”、第三正则表达式“GAMMA
”和第四正则表达式“delTA”。表达式集合REGEX_2 517仅包括关键字、锚和简单的正则表达式,表示要匹配的输入串440的细节。V 表达式集合REGEX_3 518包括利用alphabet_2 418重写的初始正则表达式集合405。在alphabet_2 418上定义表达式集合REGEX_3,包括表示原始表达式的整体结构的 更长但仍简单的表达式。Alphabet_2 418的大小非常小,因为实际的正则表达式集合通常或多或少使用字符集的相同组合,例如大写或小写字母、数字、标点等。因此,表达式集合REGEX_3 518变为第一正则表达式“ α β β β β α*α β β β β ”以及第二正则表达式“α α α α α [γ α] + β β β α α,,。在步骤320,第一 DFA编译器520 (称为DFA_1)编译表达式集合REGEX_2 517以产生第一状态机655 (称为DFAl )。第一状态机DFAl可以仅对简单正则表达式和关键字操作。第二 DFA编译器525 (称为DFA_2)编译表达式集合REGEX_3 518以产生第二状态机660 (称为DFA2)。第二状态机DFA2可以仅对alphabet— 2 418操作。对于要匹配正则表达式集合405的输入串440,输入串440应当匹配关键字、锚和简单的正则表达式以及正则表达式集合405的整体结构。因此,第一状态机DFAl 655中的状态与第二状态机DFA2660中的状态相关,从而仅在各个表达式细节出现于初始正则表达式405的上下文内部时才识别它们。图7示出了示范性相关的第一和第二状态机DFAl 655和DFA2660。状态SI表示DFAl 655的初始状态。状态S22表示DFA2 660的初始状态。DFAl 655中的状态F5、F10、F15和F21表示第一有条件的最终状态。DFA2 660中的状态F28、F33、F39、F43、F47、F51和F57表示第二有条件的最终状态。DFAl 655中的第一有条件的最终状态与DFA2 660中的一个或多个第二有条件的最终状态相关。例如,第一有条件的最终状态F5与第二有条件的最终状态F47、F51和F57相关。为了清楚起见,仅对初始状态和有条件的最终状态编号。同样为了清楚起见,仅示出了状态16和状态SI之间的一个失败转变。将有条件的最终状态称为“有条件的”,因为状态的终局以其在相关状态机中的对应终局为条件。仅仅有条件的最终状态在两个状态机DFAl 655、DFA2 660之间相关。与有条件的最终状态相反,两个状态机的无条件的最终状态之间没有关系。图7未示出任何无条件的最终状态。在步骤330,搜索部件450的输入部件634 (例如从网络114)接收初始串440。在步骤332,翻译部件635利用alphabet_2 418将初始串440翻译成第二串“string_2”652。例如,第一初始输入串“GAMMA2delTA”440翻译成“ α ααααγβββαα ”,第二初始输入串 “SALVE7delTA”440 也翻译成“ αααααγβββαα”。在步骤334,通过输入I部件645向状态机DFAl 655中输入初始串440,并行地通过输入2部件650向状态机DFA2 660中输入串2652。一次一个符号地输入初始串440和串2 652,直到全部符号已被输入。达到的任何匹配的有条件的最终状态都被检查部件665记录为已验证的结果。在步骤336,由检查部件665检查并核对已验证的结果和到达的任何其他最终状态(例如,在至少替代实施例中,状态机可以包括无条件的最终状态)。由输出部件465输出结果。利用初始串1440的示例,分别并行地、一次一个符号地向DFA1655和DFA2 660中输入 “GAMMA2delTA”440 和“ αααααγβββαα”652 的符号。在输入 “GAMMA2” 和 “α α α α α Y ”的符号之后,分别到达有条件的最终状态F21和F28,获得已验证的结果,由最终检查部件665记录。随后,在输入了 “delTA”和“β β β α α ”的符号之后,到达有条件的最终状态F15和F33。由于F21和F28相关,并且F15和F33相关,所以由输出部件465输出“真”结果。相反,利用初始串2440的不例,分别并行地、一次一个符号地向DFA1655和DFA2660 中输入 “SALVE7delTA”440 和“ αααααγβββαα ”652 的符号。在已经输入“SALVE7”和“α α α α α Y ”的符号之后,分别到达状态SI和F28。例如,“SALVE7”的“S”不对应于状态SI之后的任何第一状态。SI和F28不是相关的状态,因此最终检查部件665不记录已验证的结果。接下来,在输入“delTA”和“ β β β α α ”的符号之后,达到有条件的最终状态F15和F33。尽管F15和F33彼此相关,但未记录其他已验证的结果,因此输出部件465输出“假”结果。在步骤345,向输出部件465输出最终结果。该方法结束于步骤399。在至少一个示范性实施例中,状态机660和665是确定性有限状态自动机(DFA)。在至少一个替代示范性实施例中,状态机660和665是非确定性有限自动机(NFA)或DFA和NFA的组合。在至少一个示范性实施例中,可以使用任何DFA实施方式作为上述分解策略的底层支持。例如,可以使用关键字图确定性自动机、硬件BFSM实施方式或甚至经典的DFA。在本发明的至少一个示范性实施例中,将初始正则表达式集合405分解成包括第一字母表的多于两个状态机660、665以及多于一个另一字母表2 418。利用字母表2翻译初始串440以在由多于两个状态机660和665处理之前提供串2 652。在替代示范性实施例中,初始正则表达式集合405包括关键字,关键字是在整体上解释的词。关键字不是由字符符号构成的,并且出现在第一状态机DFAl 655中,因为不能利用符号映射将这样的关键字翻译为第二状态机。但是,仅仅由字符符号,诸如“

”构造的关键字出现于第二状态机DFA2 600中,因为一旦利用映射的符号集翻译关键字,就可以用非常紧凑的形式表示这样的关键字。相反,第一状态机DFAl 655中包括仅由字符符号构造的关键字导致第一状态机DFAl 655中的状态爆炸。紧凑的状态机比具有更多状态的状态机需要更少的存储器资源。关键字造成状态机DFAl 655和DFA2660中的无条件的最终状态。在至少一个不范性实施例中,向多于一个被映射的符号集上映射符号集。例如,如果将[Α-Z]映射到α,并且将[a-z]映射到β,那么将[A_Za_z]映射到α β。上述状态机复杂性的消除可以包括将正则表达式集合的表达式重写为排除了一个或多个闭包算子“*”、“ + ”、可选算子“? ”或重复算子的等效表达式集合。可以利用闭包“ * ”算子重写正闭包算子“ + ”。例如,可以将正则表达式<AB+C>重写为<ABB*C>。可以通过对“?”算子进行组合性扩展,然后删除所有冗余的表达式来重写可选算子“? ”。此外,可以通过替代所有无边界的重复并在末尾插入闭包算子来扩展正则表达式,从而重写重复算子“ ln;m} ”。例如,可以将正则表达式<AB{3;5}C>转换成〈ABBBCABBBBCABBBBBO,并且可以将正则表达式〈AB {3;} O转换成<ABBBB*C>。可以完全或部分在硬件、现场可编程门阵列(FPGA)或专用集成电路(ASIC)中执行上述方法和布置。但是,也可以完全或部分在运行于一个或多个处理器(图中未示出)上的软件中执行上述方法和布置,并且可以通过诸如磁或光存储装置等任何适当的数据载体(图中也未示出)上承载的一个或多个计算机程序元素的形式提供软件。在至少一个示范性实施例中,上述消息140可以是电子邮件消息。但是,本发明不限于此,并且可适用于其他类型的消息(例如,具有可被更新的分布列表的那些消息)。图8示出了可以实施本公开方法和/或系统的计算机系统的示例。可以以运行于计算机系统上的软件应用的形式实施本公开的系统和方法或系统和方法的一部分,计算机系统例如是大型机、个人计算机(PC)、手持式计算机、服务器等,例如,图4的转换部件410和搜索部件450,图5的分析部件515、更新部件516、第一 DFAl编译器520和DFA2编译器525,以及图6的输入翻译部件635、第一状态机655、第二状态机650和检查部件665可以被实现为软件应用,该软件应用执行上面参考图4-6的对应方面描述的方法。软件应用可以存储在计算机可读介质(例如硬盘驱动器存储器1008)上,计算机可读介质可以在本地由计算机系统访问并经由硬连线或无线连接可由网络访问,网络例如是局域网或因特网。一般称为系统1000的计算机系统可以包括,例如中央处理单元(CPU) 1001、随机存取存储器(RAM) 1004、打印机接口 1010、显示单元1011、局域网(LAN)数据传输控制器
1005,LAN接口1006、网络控制器1003、内部总线1002和一个或多个输入装置1009,例如键盘、鼠标等。如图所示,系统1000可以经由链路1007连接到数据存储装置,例如硬盘1008。CPU 1001可以是计算机处理器,其执行上文参考图3-7所述的方法的步骤。可以通过LAN接口 1006接收输入串,并且可以从计算机系统,例如通过LAN接口
1006、通过打印机接口1010或在显示单元1011上输出由本发明的实施例确定的匹配结果。要理解的是,上文公开的示范性实施例仅仅是例示性的,因为本发明可以以不同但是对得益于这里的教导的本领域技术人员而言是等效的方式来修改和实践。因此,显然可以变更或修改这里公开的示范性实施例,并且所有这样的变化都被视为处于本发明的范围和精神之内。为免除怀疑,在整个说明书和权利要求中使用的术语“包括”不被解释为意指“仅由…构成”。
权利要求
1.一种用于在数据处理系统中将第一输入串和第一正则表达式集合匹配的设备,其中所述第一正则表达式集合包括来自第一字母表的符号,且其中所述数据处理系统包括网络,所述设备包括 分析部件,用于由所述第一正则表达式集合确定第二字母表; 更新部件,用于响应于所述分析部件确定所述第二字母表,确定第二正则表达式集合和第三正则表达式集合,其中所述第二正则表达式集合包括来自所述第一字母表的符号,且其中所述第三正则表达式集合包括来自所述第二字母表的符号; 编译器部件,用于响应于所述更新部件确定所述第二正则表达式集合和所述第三正则表达式集合,将所述第二正则表达式集合编译到第一状态机中,其中所述第一状态机包括至少一个第一有条件的最终状态,并将所述第三正则表达式集合编译到第二状态机中,其中所述第二状态机包括至少一个第二有条件的最终状态,且其中每一个第一有条件的最终状态对应于至少一个第二有条件的最终状态; 输入部件,用于从网络接收第一输入串,其中所述第一输入串包括来自第一字母表的符号; 翻译部件,用于响应于所述输入部件接收所述第一输入串,将所述第一输入串翻译成第二输入串,其中所述第二输入串包括来自所述第二字母表的符号; 机器部件,用于响应于所述翻译部件翻译所述第一输入串,并行地向所述第一状态机中输入第一输入串且向所述第二状态机中输入第二输入串; 比较部件,用于响应于所述机器部件输入第一和第二输入串,将所述第一有条件的最终状态与对应的第二有条件的最终状态作比较;以及 检查部件,用于响应于所述第一有条件的最终状态和对应的第二有条件的最终状态匹配,提供已验证的结果。
2.根据权利要求I所述的设备,其中所述设备还包括输出部件,用于响应于所述检查部件提供多个已验证的结果,验证所述多个已验证的结果并提供完全验证的匹配。
3.根据前述权利要求中的任一项所述的设备,其中所述第一字母表包括多个符号集,且其中所述分析部件进一步可操作用于 将所述符号集的每一个映射到一个或多个被映射的符号;以及响应于映射所述符号集的每一个,确定第二字母表,其中所述第二字母表包括所述被映射的符号的每一个。
4.根据前述权利要求中的任一项所述的设备,其中所述设备还包括 接收部件,用于接收所述第一正则表达式集合;以及 响应于所述接收部件接收所述第一正则表达式集合,所述分析部件进一步可操作用于分析所述第一正则表达式集合以确定第二字母表。
5.根据前述权利要求中的任一项所述的设备,其中所述第一状态机和所述第二状态机中的至少一个是确定性的。
6.根据前述权利要求中的任一项所述的设备,其中所述第一状态机和所述第二状态机中的至少一个还包括至少一个无条件的最终状态,且其中所述设备还包括 所述比较部件,进一步可操作用于评估所述至少一个无条件的最终状态;并且 所述检查部件,用于响应于所述至少一个无条件的最终状态是活动的,提供已验证的结果。
7.一种用于在数据处理系统中将第一输入串和第一正则表达式集合匹配的方法,其中所述第一正则表达式集合包括来自第一字母表的符号,且其中所述数据处理系统包括网络,所述方法包括步骤 由所述第一正则表达式集合确定第二字母表; 响应于确定所述第二字母表,确定第二正则表达式集合和第三正则表达式集合,其中所述第二正则表达式集合包括来自所述第一字母表的符号,且其中所述第三正则表达式集合包括来自所述第二字母表的符号; 响应于确定所述第二正则表达式集合和所述第三正则表达式集合,将所述第二正则表达式集合编译到第一状态机中,其中所述第一状态机包括至少一个第一有条件的最终状态,并将所述第三正则表达式集合编译到第二状态机中,其中所述第二状态机包括至少一个第二有条件的最终状态,且其中每一个第一有条件的最终状态对应于至少一个第二有条件的最终状态; 从网络接收第一输入串,其中所述第一输入串包括来自第一字母表的符号; 响应于接收所述第一输入串,将所述第一输入串翻译成第二输入串,其中所述第二输入串包括来自第二字母表的符号; 响应于翻译所述第一输入串,并行地向所述第一状态机中输入第一输入串,且向所述第二状态机中输入第二输入串; 响应于输入第一输入串和第二输入串,比较第一有条件的最终状态与对应的第二有条件的最终状态;以及 响应于所述第一有条件的最终状态和对应的第二有条件的最终状态匹配,提供已验证的结果。
8.根据权利要求7所述的方法,其中所述方法还包括,响应于提供多个已验证的结果,验证所述多个已验证的结果并提供完全验证的匹配。
9.根据权利要求7或8中的任一项所述的方法,其中所述第一字母表包括多个符号集,且其中所述方法还包括 将所述符号集的每一个映射到一个或多个被映射的符号;以及 响应于映射所述符号集的每一个,确定所述第二字母表,其中所述第二字母表包括被映射的符号的每一个。
10.根据权利要求7到9中的任一项所述的方法,其中所述方法还包括 接收所述第一正则表达式集合;以及 响应于接收所述第一正则表达式集合,分析所述第一正则表达式集合以确定第二字母表。
11.根据权利要求7到10中的任一项所述的方法,其中所述第一状态机和所述第二状态机中的至少一个是确定性的。
12.根据权利要求7到11中的任一项所述的方法,其中所述第一状态机和所述第二状态机中的至少一个还包括至少一个无条件的最终状态,且其中所述方法还包括 访问所述至少一个无条件的最终状态;以及 响应于所述至少一个无条件的最终状态是活动的,提供已验证的结果。
13.一种用于在数据处理系统中将第一输入串和第一正则表达式集合匹配的计算机程序产品,其中所述第一正则表达式集合包括来自第一字母表的符号,且其中所述数据处理系统包括网络,所述计算机程序产品包括 计算机可读存储介质,所述计算机可读存储介质可以由处理电路读取并存储由处理电路执行以执行根据权利要求7到12中的任一项所述的方法的指令。
14.存储于计算机可读介质上并可加载到数字计算机的内部存储器中的计算机程序,包括软件代码部分,当所述程序运行于计算机上时,所述软件代码部分用于执行根据权利要求7到12中的任一项所述的方法。
15.一种包括数据处理系统的设备,所述数据处理系统用于将第一输入串与第一正则表达式集合匹配,所述数据处理系统包括 处理器; 存储计算机程序的存储器; 配置成执行所述计算机程序的处理器,其中所述计算机程序包括用于执行如下操作的指令 将所述第一正则表达式集合的至少两个相关的符号映射到唯一的符号; 通过用所述唯一的符号替代所述第一输入串中的所述至少两个相关的符号的每一个实例来产生第二输入串;以及 对所述输入串操作第一状态机,且对所述第二输入串操作第二状态机,以确定所述第一输入串是否与所述第一正则表达式集合匹配。
16.根据权利要求15所述的设备,其中所述第一状态机包括至少一个第一有条件的最终状态,其中所述第二状态机包括至少一个第二有条件的最终状态,且其中每一个第一有条件的最终状态对应于至少一个第二最终状态。
17.根据权利要求16所述的设备,其中当所述第一状态机处在有条件的最终状态且所述第二状态机处于对应的有条件的最终状态时,确定匹配。
18.根据权利要求17所述的设备,其中所述第一状态机和所述第二状态机中的至少一个还包括至少一个无条件的最终状态。
19.根据权利要求15到18中的任一项所述的设备,还包括网络,其中所述数据处理系统跨越所述网络接收第一输入串。
20.根据权利要求15到19中的任一项所述的设备,其中所述第一状态机和所述第二状态机中的至少一个是确定性的。
21.根据权利要求15到20中的任一项所述的设备,其中分别并行地向第一状态机和第二状态机中输入所述第一输入串和所述第二输入串。
22.根据权利要求15到21中的任一项所述的设备,其中所述第二状态机是由第二表达式集合构建的,所述第二表达式集合是通过用所述唯一的符号替代所述第一正则表达式集合中所述至少两个相关的符号的每一个实例产生的。
23.根据权利要求22所述的设备,其中所述第一状态机是由第三表达式集合构建的,所述第三表达式集合是通过重写所述第一表达式集合的至少一个表达式以减小所述至少一个表达式的状态复杂性来产生的。
24.根据权利要求23所述的设备,其中当所述第一正则表达式集合的正则表达式包括闭包算子、重复算子或可选算子时,用所述第三正则表达式集合替代所述第一正则表达式集合,所述第三正则表达式集合等效于所述第一正则表达式集合,但排除所述算子。
25.一种用于在数据处理系统中将第一输入串和第一正则表达式集合匹配的方法,所述方法包括 由所述数据处理系统确定在所述第一正则表达式集合中表示的不重叠的符号集的最小集; 由所述数据处理系统将所述不重叠的符号集分别映射到新符号; 由所述数据处理系统通过重写所述第一正则表达式集合以消除造成状态机复杂性的分量来产生第二正则表达式集合; 由所述数据处理系统通过用对应的新符号替代所述第一正则表达式中的表达式中的符号集来产生第三正则表达式集合;以及 由所述数据处理系统利用由所述第二正则表达式集合构建的第一状态机和由所述第三正则表达式集合构建的第二状态机来确定所述第一输入串是否匹配所述第一正则表达式。
26.根据权利要求25所述的方法,其中当所述第一正则表达式集合的正则表达式包括闭包算子、重复算子或可选算子时,所述重写包括用所述第三正则表达式集合替代所述第一正则表达式,所述第三正则表达式集合等效于所述第一正则表达式集合,但排除所述算子。
27.根据权利要求25或26中的任一项所述的方法,其中所述不重叠的符号集中的至少一个仅包括至少两个字母。
28.根据权利要求25到27中的任一项所述的方法,其中所述不重叠的符号集中的至少一个仅包括至少两个数字。
29.根据权利要求25到28中的任一项所述的方法,其中确定所述第一输入串是否匹配所述第一正则表达式包括 通过用对应的新符号替代所述第一输入串中的表达式中的符号集来产生第二输入串; 对所述第一输入串操作所述第一状态机; 对所述第二输入串操作所述第二状态机;以及 基于所述第一状态机和所述第二状态机的输出确定匹配。
30.根据权利要求29所述的方法,其中确定匹配包括当所述第一状态机输出的状态为最终状态且所述第二状态机输出的状态为对应的最终状态时,指示匹配。
31.根据权利要求29所述的方法,其中确定匹配包括当所述第一状态机或第二状态机之一输出的状态为初始状态时,指示不匹配。
32.根据权利要求30所述的方法,其中所述最终状态是有条件的或无条件的。
33.根据权利要求25到32中的任一项所述的方法,其中所述第一输入串是由所述数据处理系统跨越网络接收的。
34.根据权利要求25到33中的任一项所述的方法,其中所述第一状态机和所述第二状态机中的至少一个是确定性的。
35.根据权利要求25到34中的任一项所述的方法,其中分别并行地向所述第一状态机和所述第二状态机中输入所述第一输入串和所述第二输入串。
36.一种用于将第一输入串和第一正则表达式集合匹配的计算机程序产品,所述计算机程序产品包括 计算机可读存储介质,具有与其一起包含的计算机可读程序代码,所述计算机可读程序代码包括 配置成将所述第一正则表达式集合的至少两个相关的符号映射到唯一的符号,通过用所述唯一的符号替代所述第一输入串中所述至少两个相关的符号的每一个实例来产生第二输入串,以及对所述输入串操作第一状态机并对第二输入串操作第二状态机以确定所述第一输入串是否与所述第一正则表达式集合匹配的计算机可读程序代码。
37.根据权利要求36所述的计算机程序产品,其中所述第一状态机是通过重写所述第一正则表达式集合以消除导致状态机复杂性的分量而由第二正则表达式集合构建的,所述第二状态机是通过用所述唯一的符号替代所述第一正则表达式中的表达式中的至少两个相关的符号而由第三正则表达式集合构建的。
38.根据权利要求37所述的计算机程序产品,其中所述第一状态机和所述第二状态机中的至少一个是确定性的。
全文摘要
一种设备包括用于将第一输入串与第一正则表达式集合匹配的数据处理系统。数据处理系统包括处理器、存储计算机程序的存储器,配置成执行计算机程序的处理器。所述计算机程序包括用于将所述第一正则表达式集合的至少两个相关的符号映射到唯一的符号、通过用所述唯一的符号替代所述第一输入串中至少两个相关的符号的每一个实例来产生第二输入串、以及对所述输入串操作第一状态机并对第二输入串操作第二状态机以确定所述第一输入串是否与所述第一正则表达式集合匹配的指令。
文档编号H04L29/06GK102844759SQ201180019763
公开日2012年12月26日 申请日期2011年2月16日 优先权日2010年4月20日
发明者D·帕斯托, F·佩特里尼, V·阿加瓦尔 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1