Поэтому у меня есть следующие строки:необязательного матч несколько строк
192.168.1.254... 0000 0000 0010 = Flags: 0x002 (SYN)445
192.168.1.254... 0000 0000 0010 = Flags: 0x002 (SYN,ACK)445
192.168.1.254... 0000 0000 0010 = Flags: 0x002 (SYN,ACK,PSH)445
Я пытаюсь создать Regex, который будет соответствовать всем из этих строк, и я пытаюсь отделить определенное содержание. В настоящее время я создал следующее Regex.
Regex pattern = new Regex(@"(?<ip>(?:\d{1,3}\.){3}\d{1,3}).*Flags:\s\d{1}x\d{3}\s\((?<flag>\w+)\)(?<port>\d+)");
Это дает мне IP = 192.168.1.254
, флаг = SYN
и порт = 445
. Однако это будет соответствовать только первой строке. Я хочу, чтобы часть флага содержала SYN
- SYN,ACK
- SYN,ACK,PSH
возможно даже четвертый, такой как SYN,ACK,PSH,URG
.
Я попытался, глядя на опциональной регулярное выражение (но не могу заставить его работать), такие как:
Regex pattern = new Regex(@"(?<ip>(?:\d{1,3}\.){3}\d{1,3}).*Flags:\s\d{1}x\d{3}\s\((?<flag>[\w,]+)\)(?<port>\d+)");
или создания нескольких регулярных выражений, чтобы соответствовать каждому из них по отдельности (это препятствует остальной части программы).
Я думаю, что создание ACK, частей PSH необязательно, но я не могу заставить его работать.
В Интернете есть множество инструментов тестирования RegEx. [Это] (http://regexlib.com/RETester.aspx?AspxAutoDetectCookieSupport=1) позволяет указать механизм .NET RegEx. Запутайтесь с несколькими из них и найдите тот, который позволит вам быстро протестировать и уточнить ваши выражения. – HABO