原始IRC输出缺口和通过Regex解析消息

时间:2015-09-23 06:11:15

标签: c# regex irc

我试图以更易读的方式解析Twitch IRC聊天。 我从来没有使用过Regex,也不确定如何解决这个问题(即使在阅读了大量的教程之后。)

这是原始输出:

:nick!nick@nick.tmi.twitch.tv PRIVMSG channel :

我想要两个正则表达式来解析昵称和单独使用的消息,谢谢!

1 个答案:

答案 0 :(得分:1)

正则表达式不是您解决此问题的方法。如果你真的想要走这条路(但不要 - 继续阅读!),那么你可以使用这样的东西 整个信息:

:(?<nick>[^ ]+?)\!(?<user>[^ ]+?)@(?<host>[^ ]+?) PRIVMSG (?<target>[^ ]+?) :(?<message>.*)

在昵称,用户名,主机名,频道和消息上定义了捕获组。我没有对它进行测试,并且几乎所有其他IRC事件都会失败,并且会有办法打破它或绕过匹配,因为它是IRC的错误语法工具:它就像锤击指甲用螺丝刀 - 虽然它在某些时候起作用,但它比它需要的更难,并且可以通过大量的时间,精力和痛苦使其更好地工作;你为什么不用锤子?

更好的解决方案就是简单地解析邮件。 RFC1459和RFC2812中的IRC规范给出了一些非常有用的提示。我的经验建议是拆分“:”(空格然后冒号) - 这是消息的最后一个参数,然后用空格分割前半部分。如果列表中的第一个条目以空格开头,请再次拆分!和@来得到的部分 昵称/用户名/主机名元组。遵循这个方法,你将拥有一个比使用正则表达式构建的解析器更强大和可扩展的解析器。

如果你这样做是为了学习,那太好了!如果没有,您可能需要考虑使用预先构建的库来处理所有IRC通信。