0

这是分析器的结果:

在“destinationDetails”视图中,以下正则表达式无法由系统加速的正则表达式引擎执行,而是由Java内置的正则表达式引擎执行:

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

在大多数情况下,发生这种不兼容是因为正则表达式包含前瞻/后瞻结构,例如 \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: Deny tcp src CBA:10.2。 2.78/1885 dst 外部:10.31.129.2/1494 由访问组“CBA_access_in”[0x8104ddd0, 0x0]

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

4

1 回答 1

0

鉴于警告消息示例,正则表达式中作为潜在问题突出的一个元素是“零宽度正向后视” (?<=dst\s)。它用于确保“dst\s”在匹配的其余部分之前,但不被捕获为匹配的一部分。

如何替换(?<=dst\s)this 在很大程度上取决于整个正则表达式的使用方式:

  • dst\s不作为比赛的一部分被捕获真的很重要吗?简而言之,如果您只是想回答“正则表达式是否匹配某些输入,是或否”,那么您可能不在乎消耗了什么。试试:/dst\s(.+?)\n/

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

于 2012-08-07T17:14:17.350 回答