繁体   English   中英

正则表达式分组失败,导致多个组失败

[英]regex grouping fails with more than one group

我有这个正则表达式,用于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;

问题出在第一组中的(.*?)* 请尝试(.*?)

如果没有第二组,则匹配直到行的末尾。 但是,添加第二组时,需要先退出以允许第二组匹配。 由于您有两个量词相互作用,因此有数不胜数的匹配方法,直到它足够退后以允许第二组匹配为止。

一个例子。 假设您将字符串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)

因此,对于每个添加的字符,可能的匹配数目将增加一倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM