我有这个正则表达式,对于C#。警报部分工作正常,但是当我添加msg组时, 它只是挂起,光标在命令行上闪烁。
我错过了什么,他们都是独立工作,但不是完整的群体地图。
string pattern = @"(?<action>alert\s+(?:tcp|udp|icmp)\s+(.*?)*[(])\s+" +
@"(?<msg>msg[:](.*?)\[;\s*])";
Regex rgx = new Regex(pattern);
Match res = rgx.Match(rule);
我尝试匹配#alert tcp $EXTERNAL_NET any -> $HOME_NET 12345:12346 (msg:"MALWARE-BACKDOOR netbus getinfo"; flow:to_server,established;
答案 0 :(得分:0)
问题在于您的第一组(.*?)*
。请改为(.*?)
。
当匹配而没有第二组时,只匹配直到行的结尾。但是,添加第二组时,需要退回以允许第二组匹配。由于你有两个量词交互,所以有很多方法可以匹配,直到它足够后退以允许第二组匹配。
一个例子。假设您将字符串abc
与(.*?)*
匹配。匹配的方法是:
(a)(b)(c)
(a)(bc)
(ab)(c)
(abc)
并且这不计算正则表达式可能匹配的空字符串(因为.*
也匹配空字符串)。
尝试匹配一个字符,比如说abcd
,产生尽可能匹配:
(a)(b)(c)(d)
(a)(b)(cd)
(a)(bc)(d)
(a)(bcd)
(ab)(c)(d)
(ab)(cd)
(abc)(d)
(abcd)
因此,对于每个添加的角色,可能的匹配数量会翻倍。