专利名称:正则表达式的有条件的执行的制作方法
技术领域:
本发明涉及正则表达式的执行。
背景技术:
计算机已变得高度集成于工作、家庭、移动设备以及许多其他地方中。计算机可快速且有效地处理大量信息。被设计成在计算机系统上运行的软件应用允许用户执行包括商业应用、学校作业、娱乐等等在内的各种各样的功能。软件应用通常被设计成执行特定任务,诸如用于草拟文档的文字处理器应用或者用于发送、接收和组织电子邮件的电子邮件程序。在某些情况中,可设计软件应用来解析文档、电子邮件或其它字符串的文本。在这样的情况中,可使用正则表达式来标识文本内的词、短语或某些字符。例如,垃圾邮件过滤器可使用正则表达式来扫描电子邮件消息中通常与不想要的垃圾邮件消息相关联的某些词或短语。在其它情况中,正则表达式可扫描数字或其它字符的串。然而,这些正则表达式可以是非常大且复杂的。处理这些复杂的正则表达式可消费相当数量的处理资源。
发明内容
此处描述的实施例针对通过规范化正则表达式项来有条件地执行正则表达式以及简化正则表达式。在一个实施例中,计算机系统访问要出现在所选文本部分中的所标识的正则表达式关键项。从所选正则表达式中的项中标识正则表达式关键项。计算机系统确定所标识的正则表达式关键项是否出现在所选文本部分中。在判断没有所标识的正则表达式关键项出现在所选文本部分中时,计算机系统还阻止执行该正则表达式。在判断至少一个所标识的正则表达式关键项出现在所选文本部分中时,计算机系统执行该正则表达式。在另一实施例中,计算机系统访问正则表达式中的正则表达式项。配置正则表达式用于寻找文档中的所需字符集合。计算机系统判断要规范化某些正则表达式项。基于该判断,计算机系统规范化正则表达式项,使得将至少一个之前未被规范化的正则表达式项被简化成单个、规范化的项。提供本发明内容以便以简化形式介绍在以下具体实施方式
中进一步描述的一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。另外的特征和优点将在以下的描述中阐述,并且部分可从该描述中显而易见,或者可以从此处的教示实践中习得。本发明内容并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。本发明的特征将从以下描述和所附权利要求书中变得完全显而易见,或者可通过如下所述对本发明的实践而获知。
为了进一步阐明本发明的各实施例的以上和其他优点和特征,将参考附图来呈现本发明的各实施例的更具体的描述。可以理解,这些附图只描绘本发明的典型实施例,因此将不被认为是对其范围的限制。本发明将通过使用附图用附加特征和细节来描述和解释, 附图中图1示出了其中本发明的各实施例可操作的计算机体系结构,操作包括通过规范化正则表达式项来有条件地执行正则表达式并简化正则表达式。图2示出了用于有条件地执行正则表达式的示例方法的流程图。图3示出了用于通过规范化正则表达式项来简化正则表达式的示例方法的流程图。图4示出了其中文本被规范化并实现在正则表达式中的计算机体系结构。
具体实施例方式此处描述的实施例针对通过规范化正则表达式项来有条件地执行正则表达式以及简化正则表达式。在一个实施例中,计算机系统访问要出现在所选文本部分中的所标识的正则表达式关键项。从所选正则表达式中的项中标识正则表达式关键项。计算机系统确定所标识的正则表达式关键项是否出现在所选文本部分中。在判断没有所标识的正则表达式关键项出现在所选文本部分中时,计算机系统还阻止执行该正则表达式。在判断至少一个所标识的正则表达式关键项出现在所选文本部分中时,计算机系统执行该正则表达式。在另一实施例中,计算机系统访问正则表达式中的正则表达式项。配置正则表达式用于寻找文档中的所需字符集合。计算机系统判断要规范化某些正则表达式项。基于该判断,计算机系统规范化正则表达式项,使得将至少一个之前未被规范化的正则表达式项被简化成单个、规范化的项。以下讨论现涉及可以执行的多种方法以及方法动作。应当注意,虽然这些方法动作可能是按一定次序讨论的,或者是在流程图中被描绘为是按照特定顺序进行的,然而并非必然需要特定的次序,除非特别声明,或者是因为一个动作依赖于另一动作在该动作被执行之前完成而需要的。本发明的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的。本发明范围内的各实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理介质和其他计算机可读介质。这些计算机可读介质可以是通用或专用计算机系统能够访问的任何可用介质。存储计算机可执行指令的计算机可读介质是计算机存储介质。携带计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同类型的计算机可读介质计算机存储介质和传输介质。计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动传输到计算机存储介质(或反之亦然)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“mc”) 内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。因而,应当理解,计算机存储介质可被包括在还利用(或甚至主要利用)传输介质的计算机系统组件中。计算机可执行指令包括,例如使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可位于本地和远程存储器存储设备中。图1示出了可在其中采用本发明的原理的计算机体系结构100。计算机体系结构 100包括正则表达式105。如此处所使用地,术语正则表达式指的是用于标识文本框中的其它项、短语、词、数字或其它字符的项、符号、特殊字符、词、短语或其它字符序列。例如,正则表达式可包含被设计成寻找诸如信用卡号、社保号、名字和地址以及其它个人信息等的重要信息的某些字符。这样的正则表达式可被实现成协助数据泄漏防止程序,数据泄漏防止程序阻止用户在开放的文本电子邮件或其它文档中发送这样的个人信息。正则表达式(例如,105)可包括基本上任何数量的项或特殊字符。关键项标识模块110可被用于标识正则表达式中的一个或多个关键项111。如此处所使用的关键项可包括对该正则表达式而言具有重大意义的正则表达式项。换言之,若没有关键项,正则表达式将不匹配,且正则表达式的其余部分不必被应用。从而,在上述示例中,如果正则表达式被设计成寻找“信用卡”(例如“信用卡.* ? \d{16}”,关键项{ “信用卡” }),如果在文本中没有找到词“信用卡”,则正则表达式将不匹配。而且,因为正则表达式不匹配,不必在该文本中搜索其它信息。关键项评估模块115可访问文本部分116,文本部分116可以是电子邮件、文档、网页或包括文本的任何其它文件或项目。模块115可评估文本部分来判断它是否具有正在使用的正则表达式(105)的任何所标识的关键项111。判断117指示所标识的关键项在文本部分中存在或者在文本部分中不存在。基于该判断,正则表达式执行模块120或者在关键项在文本部分中不存在的情况中阻止执行,或者可在关键项在本文部分中存在的情况中启动执行。在执行正则表达式的情况中,执行结果121可被发送给用户、计算机系统、软件应用或其它实体。图4包括规范化模块435。如此处所使用地,术语“规范化”指的是在文本处理期间标识一组字符,并将这些字符转换成单个字符。例如,在一个实施例中,任何阿拉伯数字 (0-9)可被处理成(即转换成)0。因此,在以上信用卡示例中,正则表达式将不需要匹配某些特定的数字串,而是16个各自表示数字0-9的连续的0。可使用规范化的众多其它实现, 且该示例不应被解读为限制可能的规范化的类型。规范化模块435可访问文本部分416,以及对要规范化的字符的指示430。该指示可从用户、计算机系统、软件应用或其它实体接收。基于该指示,模块435可按照指令规范化字符并输出带有规范化字符的文本436。这种带有规范化字符的文本可被发送到关键项评估模块415来判断文本是否包括任何所标识的关键项。另外地或另选地,带有规范化的字符的文本可被发送到正则表达式执行模块420供正则表达式分析。以此方式,正则表达式可被静态地分析以提取关键项,且如果这些关键项存在则有条件地执行正则表达式。这允许使用非常复杂的正则表达式。在可能发现正则表达式的一部分要求要匹配一组关键项中的任何一个的时候,正则表达式的其余部分可能是高度复杂的。这允许使用现有的正则表达式语料库,其中某些正则表达式可能是非常复杂的。对正则表达式的预处理可被用于生成有条件的正则表达式。在某些情况中,可对语料库中的每一个正则表达式执行一次预处理。结果可被保存然后可在执行阶段期间消费。预处理可被设计成从正则表达式提取项,以便加速执行阶段。可在预处理期间执行规范化。在某些实施例中,可能导致多个匹配的错列(alternation)或运算符得到多个生成的项。例如,“this I that (这那)”得到项“this”和“that”。如果运算符不能被转成项(或会得到过多的项),可创建项组。例如,“this\w*that”可得到项组{‘this,,‘that,} (\w*不会生成任何有限项集)。可单独地解析组,然后与其余结果合并。例如,“Test (stuff! data) text(测试(资料I数据)文本)”导致从包含的组中产生{ ‘stuff (资料)’,‘data(数据),},然后合并到父组中,以产生{ ‘Test stuff text(测试资料文本),,‘Test data text (测试数据文本)’ }。以下示例仅用于说明的目的,而不应被解读为限制本发明的范围。在这些示例中, 应用以下术语给定η个正则表达式且i I 0 < i < η,令氏为第i个正则表达式。要在其上执行正则表达式的目标文档是D。(在规范化后)在关键项中有用的字符被聚集并组合成集合S” Si包括项组&。每一个生成的Si被分组成T (例如,T= {SjO^i^n}).如果正则表达式不能被解析,或者导致过多的项,则Si为空(意味着总是要执行Ri)。当在文档上执行时,使用诸如Aho-Corasick的搜索算法来搜索文档D内的所有项 (例如,组S中任何一个的任何成员),这可在一遍中匹配T中的任何项(例如,可找到出现在D中的任何Si中的所有项的集合)。如果Si匹配,则Ri可能匹配,且如果Si不匹配,则 Ri也不会匹配。如果Si下的任何项组g匹配或者Si为空,则Si匹配。如果g中的每个项均出现在D中,则“g”匹配。当Si不匹配时,正则表达式不匹配。这可在许多场景中发生(例如对检测信用卡的正则表达式,大多数文档不包含信用卡,且因此正则表达式通常不会匹配)。当Si不匹配时,可能发生以下情况中的一种1)在提取关键项时完全处理了正则表达式。则当且仅当Si匹配时氏匹配,2)部分处理了正则表达式,开始和结束长度已知。则,可在D内的约束范围内执行对氏的搜索。或者3)部分处理了正则表达式,且开始和结束长度未知。则可对D 运行氏。如果Si为空(不能被生成),则在D上执行氏。因此,通过使用Si有条件地执行
Ri ο对经解析的正则表达式,性能增益可能是显著的。“η”个正则表达式在长度m的文档上运行时间为0(n*m),而η个(成功预处理的)有条件的正则表达式可在0 (m)时间内运行(在正则表达式或者完全被处理了或者不匹配文档的情况下)。对许多情况,如数据泄漏保护和反垃圾邮件,大多数正则表达式不匹配任何给定文档,且因此可避免对许多正则表达式的处理。如上所述,规范化是在文档处理期间将一组字符转换成单个字符的过程。可基于实现,极大地改变对哪些字符来规范化的选择。转换可在处理正则表达式时(此时,对组中的任何字符的匹配改为匹配单个字符)以及在文档内搜索项时(此时转换了组中的任何字符)执行。该过程可放宽可被成功转换成条件正则表达式的正则表达式的数目。而且,经预处理的正则表达式与正常的正则表达式相比,执行速度显著加快。在某些情况中,数据泄漏保护正则表达式可能是高度面向数字的。基于数字的规范化可显著地增加可被预处理的正则表达式的数目。例如,当读取文档时,可将任何阿拉伯数字(0到9)处理成0。当此完成时,它很大程度上减少了需要匹配正则表达式的项的数量。例如,
{3}在规范化之前生成大量项(且要匹配社保号的原始正则表达式如
{3}-
{2}-
{4}生成更多项)。在规范化之后,这些分别变为000和000-00-0000。 由于大多数文档不具有这样的数字串,搜索这样的串的大多数正则表达式不匹配任何给定文档。项规范化可能有用的其它示例包括数字、连续空格字符、语言(Unicode码块)、 字母字符(例如a-z)、符号(规范化常见的文本符号,如~)、大小写(caseM使所有变为小写)、或任何良好定义的字符集(例如,对找出十六进制数字是重要的正则表达式, abcdef可映射为0)。使用规范化的项可能不会完全解析正则表达式;因此,如果项集匹配, 则将需要执行Ri。通过处理正则表达式本身来从正则表达式提取项。当遇到在相对较小的字符集 (其大小可自定义)内可匹配的字符时,例如,
可以是10个可能性中的任一个,在 ASCII正则表达式中,可以是沈或52 (取决于匹配是否是大小写敏感的),且在Unicode 正则表达式中,可以是几千个字符。连续可匹配字符可被聚集成项集,直到遇到不能被加入项的项目(例如,\ *)。下一可匹配字符开始新的项集。对运算符进行分组也使得项集被分组。首先单独地处理各组,然后将其合并成较高层的结果。在处理“a(b(c|d)) {2} ”时 将处理“(C Id)”(产生{ ‘C,,‘(1,}),然后将处理“03|((|(1)”(产生{ ‘bc,,‘bd,}),最后将处理顶层组,产生最终结果{ ‘abcbc,,‘abcbd,,‘abdbc,,‘abdbd,}。一旦解析完成,则产生项集的列表。然后组合每一集一一如果项的数目在任何时刻变得过大,则该集被丢弃。组合的集被置于各组中(当存在太多可能性时有另一个丢弃步骤)。得到的项组的集合形式S”以下示例提供了如何完成的指示。示例IA 规范化无,正则表达式This example. *text (这个示例.*文本)。在对其处理之后,发现以下项集‘This (这个)’、'example (示例)’、‘text (文本)’。这些被组合成单个组{ iThis',"example","text"} 0该正则表达式的开始和结束点已知(“this” 和“text”),且因此如果Si匹配,可对作为D的子集的预定义开始和结束点(从匹配“this” 开始,到匹配“text”为止)运行正则表达式氏。示例IB 规范化小写,正则表达式:The example. *text (此示例· *文本)。在对其处理之后,找到以下项集‘ the (此)’、‘ examp 1 e ’、‘ text ’。这些被组合成单个组{‘ the,, “example”,“text”}。该正则表达式的开始和结束点是已知的(“the”和“text”),且因此如果Si匹配,则可对作为D的子集的预定义的开始和结束点运行氏。示例2A:规范化无,正则表达式mhere(哪里)(is(是)|are(是))the(该) (people (人们)I person (人))。在对其处理之后,找到以下项集'where’、{‘ is’,‘are’}、 ‘the,、{‘people,,‘person,}。这些被组合并联结以形成四个项“where is the people”、 "where is the person,,、"where are the people,,、"where are the person,,(人在哪里)。正则表达式可被完全转换成项。因此,不必执行正则表达式,因为当且仅当项之一匹配时正则表达式匹配。示例2B 规范化小写,正则表达式#1^仪([1幻8|3仪)让6([ ]60 16| [Pp] ersons ?)。在对其处理之后,找到以下项集‘where,、{‘is,,‘are,}、‘the,、{‘people,, ‘person,,‘persons(人们),}。这些被组合并联结以形成六个项“where is the people”、 "where is the person Where is the persons Where are the people Where are the person ","where are the persons”(人在哪里)。正则表达式被完全转换成项,但由于规范化,这不足以确保正则表达式匹配。需要执行正则表达式来检查是否存在匹配,但给定了开始和结束点。示例2C 规范化数字,正则表达式:\w*who (谁)(will (将)(go (前往)| \d) | \ (1{2})\_切计(测试)。分析最深的组(go|\d)来产生‘go’和‘0’,分析其次的组来产生 { ‘will’,{ ‘go’,‘0’ }},‘00’ }。最终,分析顶层组。忽略\w*,因为不能从其构建出任何项。一旦组合了各项之后,产生以下组{ ‘who will go,,‘test,},{ ‘who will 0,, ‘test’}以及{ ‘who 00’,‘test’}。正则表达式没有被完全转换成项,且开始点未知。因此,如果各项匹配,则正则表达式将需要在整个文档上运行以验证匹配。示例3 规范化无,正则表达式(\w+\s+) {3} \w+0该正则表达式匹配任何四个连续的词,但是该正则表达式中没有东西能够被分析,因此,不产生项。在此示例中,需要执行正则表达式来检查是否有匹配。示例4 规范化无,正则表达式“\W*\S*S0me Text (某些文本).* ( ? ! invalid(无效)).*”,其中肯定的关键项包括{ "Some Text”}而否定关键项包括 { “invalid”}。如此处所使用地,否定关键项包括如果找到则意味着正则表达式不能匹配的项。因此,在该示例中,如果在文本中找到项“invalid”,正则表达式将不匹配。下面,分别针对图2和图3的方法200和300,更详细地解释这些和其他概念。考虑到以上描述的系统和体系结构,参考图2和图3的流程图将更好地理解根据所公开的主题实现的方法。为了解释简明起见,这些方法被示出和描述为一系列框。然而, 应该理解和了解,所要求保护的主题不受框的次序的限制,因为一些框可按不同的次序进行和/或与此处所描绘和描述的其他框同时进行。此外,并非全部所示的框都是实现下面所述的方法所必需的。图2示出了用于有条件地执行正则表达式的方法200的流程图。现在将频繁参照图1和图4相应的环境100和400的组件和数据来描述方法200。方法200包括访问要出现在所选文本部分中的一个或多个所标识的正则表达式关键项的动作,其中从所选的正则表达式中的各项中标识正则表达式关键项(动作210)。 例如,关键项评估模块115可访问要出现在所选文本部分(例如,文本116)中的所标识的关键项111。正则表达式关键项111可由关键项标识模块110标识。可从中标识关键项的正则表达式(例如正则表达式105)可包括多个不同的正则表达式项和正则表达式特殊字符。关键项可包括重要的项,若没有这些项将阻止正则表达式匹配所选的文本部分。从而, 如上所述,如果未在文档中找到正则表达式的关键项,则不必执行正则表达式的其余部分, 因为为使匹配发生,文档中必须存在关键项。在某些情况中,标识正则表达式关键项可包括仅解析正则表达式105的一部分来标识关键项111而不必解析整个正则表达式。这可通过避免解析整个正则表达式来节省处理资源。另外地或另选地,标识正则表达式关键项可包括标识一组关键项,若没有该组中的每一关键项,将阻止正则表达式匹配所选文本部分。在涉及项组的其它情况中,如果一组关键项中的任何关键项匹配所选文本部分,则该匹配可使得要执行该正则表达式。在这样的情况中,策略可确定与项组的匹配。方法200包括判断在所选文本部分中是否出现所标识的一个或多个正则表达式关键项的动作(动作220)。例如,关键项评估模块115可判断在文本部分116中是否出现所标识的一个或多个关键项111。在某些情况中,可在无需解析整个正则表达式的情况下标识所标识的关键项。在这样的情况中,可使用有界执行来执行正则表达式105。有界执行可基于在正则表达式中的何处标识了关键项而仅执行正则表达式的部分。可存储诸如元数据等的数据,标识可在正则表达式中的何处找到每一关键项。基于该信息,正则表达式执行模块120可对正则表达式执行有界执行。在这样的有界执行期间,执行可基于在正则表达式中的何处找到关键项来开始和停止。在某些实施例中,正则表达式项可在正则表达式中规范化。如上所述,规范化可通过在对文档的处理期间将某一组字符转换成单个字符来减少正则表达式中项的数目。在某些情况中,用户可能能够指定要在给定文本部分中规范化哪些字符,或者执行其它正则表达式优化。方法200包括,在判断没有所标识的正则表达式关键项出现在所选文本部分中时,阻止执行该正则表达式的动作(动作230)。例如,如果没有所标识的正则表达式关键项111出现在所选文本部分116中,则正则表达式执行模块120可阻止正则表达式的执行。 另一方面,如果一个或多个正则表达式关键项出现在文本中,则执行模块120可按计划执行正则表达式(动作M0)。以此方式,避免了在没有匹配的关键项时执行正则表达式。而且,当关键项匹配时,可像正常的一样执行正则表达式。图3示出了用于有条件地规范化正则表达式项的方法300的流程图。现在将频繁参照图1和图4相应的环境100和400的组件和数据来描述方法300。方法300包括访问正则表达式中的一个或多个正则表达式项的动作,正则表达式被配置成用于找到文档中的所需字符集(动作310)。例如,规范化模块435可访问正则表达式105中的正则表达式项。在某些情况中,用户可指示要规范化哪些正则表达式项(例如,在指示430中)。另外或另选地,软件程序或其它实体可判断对给定正则表达式,要规范化哪些正则表达式项。方法300包括判断一个或多个正则表达式项要被规范化的动作(动作320)。例如,规范化模块435 (或另一用户或软件程序)可判断,某些正则表达式项要被规范化,即从一组项转换成单个项。方法300包括基于该判断,规范化正则表达式项,使得将至少一个之前未被规范化的正则表达式项被简化成单个、规范化的项的动作(动作330)。因此,规范化模块435可规范化指定的正则表达式项(如在指示430中指示),使得将至少一个之前未被规范化的正则表达式项被简化成单个、规范化的项。得到的带有规范化字符的文本436可被发送到关键项评估模块415以评估正则表达式中的关键项和/或可被发送到正则表达式执行模块 420以便执行包括规范化的项的正则表达式。在某些情况中,可在将正则表达式项标识为关键项的同时规范化正则表达式项。 而且,在某些情况中,可在相关联的文本中(即,在文本416中)搜索规范化的项的同时规范化正则表达式项。之后,在判断在相关联的文本中找到所搜索的规范化的项的至少一个, 可执行完整的正则表达式。因此,提供了有条件地执行正则表达式的系统、方法和计算机程序产品。而且,提供了通过规范化正则表达式项来简化正则表达式的系统、方法和计算机程序产品。本发明可被具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。
权利要求
1.一种计算机联网环境中的包括处理器和存储器的计算机系统处的计算机实现的方法,所述计算机联网环境包括多个计算系统,所述方法用于有条件地执行正则表达式,所述方法包括以下动作访问要出现在所选文本部分(116)中的一个或多个所标识的正则表达式关键项(111) 的动作,其中从所选的正则表达式(105)中的各项中标识正则表达式关键项;判断在所选文本部分(116)中是否出现所述一个或多个所标识的正则表达式关键项 (111)的动作;以及在判断没有所标识的正则表达式关键项(111)出现在所选文本部分(116)中时,阻止执行所述正则表达式的动作。
2.如权利要求1的方法,其特征在于,还包括在判断至少一个所标识的正则表达式关键项出现在所选文本部分中时,执行所述正则表达式的动作。
3.如权利要求1所述的方法,其特征在于,还包括判断所述正则表达式被部分解析,以使得不是所有的正则表达式项被标识为关键项的动作;以及基于所述判断,使用有界执行来执行所述正则表达式的动作,其中所述有界执行在所选文本部分的子集上执行所解析的所述正则表达式的一部分。
4.如权利要求3所述的方法,其特征在于,还包括将关于在所述正则表达式中的何处找到每一关键项的数据存储在数据存储中的动作。
5.如权利要求4所述的方法,其特征在于,所述有界执行基于在所述正则表达式中的何处找到所述关键项来开始以及停止所述正则表达式的执行。
6.如权利要求1所述的方法,其特征在于,还包括判断所述正则表达式关键项中的至少一个包括否定关键项的动作;以及在所选文本部分中找到所述否定关键项时,判断所述正则表达式不匹配所选文本部分的动作。
7.一种用于实现一种方法的计算机程序产品,所述方法用于通过规范化正则表达式项来简化正则表达式,所述计算机程序产品包括其上存储有计算机可执行指令的一个或多个计算机可读存储介质,所述指令在被计算系统的一个或多个处理器执行时使得所述计算系统执行所述方法,所述方法包括访问正则表达式(105)中的一个或多个正则表达式项的动作,所述正则表达式被配置成用于找到文档中的所需字符集;判断所述正则表达式项中的一个或多个要被规范化G30)的动作;基于所述判断,规范化(435)所述正则表达式项,使得将至少一个之前未被规范化的正则表达式项被简化成单个、规范化的项G36)的动作。
8.如权利要求7所述的计算机程序产品,其特征在于,在所述相关联的文本中搜索规范化的项的同时规范化所述正则表达式项。
9.如权利要求8所述的计算机程序产品,其特征在于,还包括在判断在所述相关联的文本中找到所搜索的规范化项中的至少一个时执行完整的正则表达式的动作。
10.一种计算机系统,包括一个或多个处理器;系统存储器;其上存储有计算机可执行指令的一个或多个计算机可读存储介质,所述计算机可执行指令在由所述一个或多个处理器执行时使得所述计算系统执行一种用于有条件地执行正则表达式的方法,所述方法包括访问要出现在所选文本部分(116)中的一个或多个所标识的正则表达式关键项组 (111)的动作,其中从所选的正则表达式(105)中的各项中标识所述正则表达式关键项组; 规范化所述正则表达式(105)中一个或多个正则表达式项组的动作,其中规范化减少所述正则表达式中的项的数目;判断在所选文本部分(116)中是否出现所标识的一个或多个正则表达式关键项组111 的动作;以及在判断至少一个所标识的正则表达式关键项组(111)出现在所选文本部分(116)中时,执行所述正则表达式的动作,所述正则表达式包括由于规范化(436)而减少的项数目。
全文摘要
本发明涉及正则表达式的有条件的执行。各实施例针对通过规范化正则表达式项来有条件地执行正则表达式以及简化正则表达式。在实施例中,计算机系统访问要出现在所选文本部分中的所标识的正则表达式关键项。从所选正则表达式中的项中标识正则表达式关键项。计算机系统确定所标识的正则表达式关键项是否出现在所选文本部分中。在判断没有所标识的正则表达式关键项出现在所选文本部分中时,计算机系统还阻止执行该正则表达式。在判断至少一个所标识的正则表达式关键项出现在所选文本部分中时,计算机系统执行该正则表达式。
文档编号G06F17/22GK102567456SQ20111036440
公开日2012年7月11日 申请日期2011年11月2日 优先权日2010年11月3日
发明者C·W·拉曼纳, J·E·布鲁尔, M·H·甘地 申请人:微软公司