0

我必须从日志中提取 -(4)- 并且必须使用正则表达式。我的代码是

regex /(?!-)\d{1}+(?=-)/  

输入是

ASA-5510-6 : %ASA-4-106023: Deny udp src INTERNET:TEJ-BHARTI-ILL-2Mbps-

但是使用这个正则表达式,它也提取了类似的其他模式(-5510-)。我只想提取 this(4) 特定的四个。

整个日志是

2011-12-01T00:02:04.382593+05:18 Dec 01 2011 00:00:29 KOC-TEJ-AMEX-ASA-5510-6 : %ASA-4-106023: Deny udp src INTERNET:TEJ-BHARTI-ILL-2Mbps-ROUTER-LAN-IP/58653 dst TCS:VIS-SYSLOG-SERVER/514 by access-group "INTERNET_access_in" [0xc97c8100, 0x0]

谢谢

4

3 回答 3

0

这个怎么样:

/%ASA-(\d+)-/

您似乎正在尝试匹配日志中“%ASA-”之后的数字。

\d 之后不需要 {1},因为您使用的是 +。{1} 表示您只有一个 1 位,而 + 表示您需要多个位。{1}+ 表示您需要多个 1 数字,这与多个数字相同。

根据文档,您可以使用以下语法返回匹配组(括号中的内容):

create view Phone as
extract regex /(\d{3})-(\d{3}-\d{4})/ 
    on between 4 and 5 tokens in D.text 
    return 
        group 1 as areaCode
        and group 2 as restOfNumber
        and group 0 as fullNumber
from Document D;

第 0 组是完全匹配,所以你想要的是第 1 组,它是第一个带括号的捕获组。在查询末尾添加“将第 1 组返回为 someNumber”应该可以解决问题。

于 2012-08-01T05:23:17.683 回答
0

只需将 %ASA 放在后面即可。也是{1}多余的,并且+匹配多个 4。

/(?<=%ASA-)4(?=-)/g如果你只想匹配一个 4。

/(?<=%ASA-)\d+(?=-)/g如果你想匹配任何一组数字。

(我不确定您是否只想匹配 4 或输入示例中 4 所在的任何内容)

于 2012-08-01T05:27:37.717 回答
0

与 不同lookaheads,JavaScript 不支持 Regexlookbehind语法。请参阅这些帖子:

于 2012-08-01T05:36:15.833 回答