如何提高剖析器的正则表达式效率

时间:2012-08-07 12:31:53

标签: java regex performance

这是分析器的结果:

  

在视图'destinationDetails'中,以下内容            正则表达式不能由系统加速执行            正则表达式引擎,将使用Java的内置常规执行            表达引擎改为:

 /(?<=dst\s)(.+?)\n/
     

在大多数情况下,这种不兼容的发生是因为常规   表达式包含lookahead / lookbehind构造   \A, \Z, \b, ^, $, (?=X), (?!X), (?<=X), or (?<!X)

     

输入来源:       2011-12-06T00:02:01.726755 + 05:18 Dec 06 2011 00:00:33 KOC-TEJ-CBA-ASA-5510-3:%ASA-4-106023:拒绝tcp src   CBA:10.2.2.78/1885 dst外部:10.31.129.2 / 1494 by access-group   “CBA_access_in”[0x8104ddd0,0x0]

有人可以解释如何更有效地克服分析器警告吗?

1 个答案:

答案 0 :(得分:0)

在给出警告信息示例的情况下,正则表达式中作为潜在问题突出的一个元素是“零宽度正向观察”(?<=dst\s)。它用于确保“dst \ s”在比赛的剩余部分之前,但不会作为比赛的一部分被捕获。

如何替换(?<=dst\s)这取决于整体正则表达式的使用方式:

  • dst\s作为比赛的一部分被捕获是非常重要的?简而言之,如果你只是想要一个答案“正则表达式是否匹配某些输入,是或否”,那么你可能不关心消耗的是什么。尝试:/dst\s(.+?)\n/

  • 如果这是一个更大的正则表达式的一部分,或者如果你正在做的更复杂的正则表达式比简单的“是/否”匹配,那么这将需要提出,以便有人提出任何明智的建议。