2014-03-28 1 views
0

Я взял свое регулярное выражение из python и попытаюсь выполнить работу в C#, в то время как я не получаю никаких ошибок, он не отображает никакого вывода и во время отладки, я не вижу выходной varible получить заполняется любыми данными, вот фрагмент кода:Parsing rules file, C# regex not see pattern

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); 

результат не показывает ничего, чего бы я пропустил, это почти то же, что я работаю в сценарии питона.

+0

Чтобы получить помощь, попробуйте отправить пример ввода образца строки с требуемой выходной – Tewr

+1

Может быть, что вы не на самом деле продвигаясь в цикле? Ваш вызов 'sr.ReadLine' происходит только один раз **. – spender

+0

Вы должны предоставить образец текста, для которого используются регулярные выражения. – Scordo

ответ

0

Поскольку вы используете строковые литералы для первого регулярного выражения, не сходите дважды!

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

=>

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

С входом, там было несколько больше вещей неправильно с регулярным выражением и этот должен привести вас в правильном направлении:

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

regex101 demo

Если вы не хотите участвовать в круглые скобки можно опустить последнюю часть:

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

Это фиксировало получение регулярных выражений, но я все равно получаю нулевой вывод для результата, я проверяю файл, и эта строка находится там, поэтому он должен забрать его и проанализировать, новая строка показывает [код ] Regex action = new Regex (@ "^ # \ w + (? (alert) \ s + (tcp | udp) \ s + (. *?) \ ('*})"); [Code] –

+0

строка: [код:] \t \t правило \t "# alert tcp $ HOME_NET 2589 -> $ EXTERNAL_NET any (msg: \" MALWARE-BACKDOOR - Dagger_1.4.0 \ "; поток: to_client, установлено; содержимое: \" 2 | 00 00 00 06 00 00 00 | Приводы | 24 00 | \ "; глубина: 16; метаданные: сообщество правил; classtype: misc-activity; sid: 105; rev: 14;); [code] –

+0

я буду, как только смогу получить доступ после работы мы блокируем все эти сайты. –