正则表达式 - 将字符串拆分为三个变量

时间:2014-08-29 20:33:04

标签: c# regex string winforms

要拆分的字符串如下所示:

192.168.1.254445.... 0000 0000 0010 = Flags: 0x002 (SYN)

此字符串中有三位信息需要提取到不同的变量:

 ip - 192.168.1.254
 port - 445
 flag - SYN

ip是一个ip地址,因此需要捕获全部地址。 端口长度可以是1-4位。 并且标志可以包含三个,三个字母的字符,例如SYN或SYN,ACK或SYN,ACK,URG等(例如,包标志的不同组合。

我尝试使用Split with(:''作为分割,但每当我输入[1]作为输出时它会创建一个

 error - Index was outside the bounds of the array.

然后,我在查看C# RegEx string extraction

时创建了此代码
Regex pattern = new Regex(@"(<?ip>\d+)(<?port>\d+).... \d{4} \d{4} \d{4} \d{4} = Flags: \d{1}x\d{3} ((<?flag>\w+))");
Match match = pattern.Match(dst1);
string ip = (match.Groups["ip"].Value);
string port = (match.Groups["port"].Value);
string flag = (match.Groups["flag"].Value);
string dst = ip + port + flag;
listBox1.Items.Add(dst);

但是这不会在listBox1中返回任何值。

如果字符串更改为:

 192.168.1.254.... 0000 0000 0010 = Flags: 0x002 (SYN)445

这样会更容易吗?

任何建议都会很棒,

感谢。

1 个答案:

答案 0 :(得分:0)

对于此输入:

192.168.1.254... 0000 0000 0010 = Flags: 0x002 (SYN)445

...使用此:

(?<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:445... 0000 0000 0010 = Flags: 0x002 (SYN)

...使用此:

(?<ip>(?:\d{1,3}\.){3}\d{1,3}):(?<port>\d+).*Flags:\s\d{1}x\d{3}\s\((?<flag>\w+)\)