解析规则文件,c# regex看不到模式

本文关键字:regex 看不到 模式 规则 文件 | 更新日期: 2023-09-27 17:54:41

我已经从python中取出了我的正则表达式,并尝试在c#中工作,虽然我没有得到错误,但它不显示任何输出,并且在调试期间,我没有看到输出变量填充任何数据,以下是代码片段:

StringWriter strwriter = new StringWriter();
rule = sr.ReadLine();
do
{                    
    Regex action = new Regex(@"^#'w+(?<action>(alert)''s+(tcp|udp)''s+(.*?)''('*}))");
    Regex message = new Regex("(?<msg>[''s(]*''((.*)'')[^)]*$)", RegexOptions.IgnorePatternWhitespace);
    Regex content = new Regex("(?<content>[''s(]*''((.*)'')[^)]*$)", RegexOptions.IgnorePatternWhitespace);
    Match result = action.Match(rule); 
    //String repl = Regex.Replace(rule, "['';]", ",");
    //Match mat = action.Match(repl);
    Console.WriteLine(result.Groups["action"].Value);
    //writer.WriteLine(result.Groups["action"].Value + "," + result.Groups["msg"].Value + "," + result.Groups["content"].Value + "," + result.Groups["flow"].Value + "," + result.Groups["ct"].Value + "," + result.Groups["pcre"].Value + "," + result.Groups["sid"].Value);
} while (rule != null);

结果不显示任何东西,我错过了什么,这些几乎与我在python脚本中工作的相同。

解析规则文件,c# regex看不到模式

由于第一个正则表达式使用的是字符串,所以不要进行双转义!

^#'w+(?<action>(alert)''s+(tcp|udp)''s+(.*?)''('*}))
                      ^            ^        ^

=>

^#'w+(?<action>(alert)'s+(tcp|udp)'s+(.*?)'('*}))

对于输入,正则表达式有更多的错误,这一个应该带你到正确的方向:

^#'s*(?<action>alert's+(?:tcp|udp)'s+(.*?)'([^)]*'))

regex101演示

如果不需要括号内的部分,可以省略最后一部分:

^#'s*(?<action>alert's+(?:tcp|udp)'s+(.*?)'()