正则表达式解析IRC消息

时间:2012-12-19 19:00:44

标签: c# regex irc

我认为用正则表达式解析IRC messages会很好。我得到了这个:

(?::(?<Prefix>[^ ]+) +)?(?<Command>[^ :]+)(?<middle>(?: +[^ :]+)*)(?<coda> +:(?<trailing>.*)?)?

然后我使用以下.NET代码来获取消息的显着元素:

Prefix = matches.Groups["Prefix"].Value;
Command = matches.Groups["Command"].Value;

var parameters = new List<string>();
parameters.AddRange(matches.Groups["middle"].Value
    .Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries));
parameters.Add(matches.Groups["trailing"].Value);

Parameters = parameters.ToArray();

但我不喜欢我必须在代码中单独拆分它。有没有办法可以从middle组中获取一系列匹配项?

1 个答案:

答案 0 :(得分:2)

您可以使用重复组的Captures属性,但我不建议。

首先,您需要将模式更改为:

@"(?::(?<Prefix>[^ ]+) +)?(?<Command>[^ :]+)(?<middle>(?: +[^ :]+))*(?<coda> +:(?<trailing>.*)?)?"

其次,你会这样做:

parameters.AddRange(match.Groups["middle"].Captures.
                    OfType<Capture>().
                    Select(c => c.Value));