【问题标题】:Java - How to parse irc message to human readableJava - 如何将 irc 消息解析为人类可读
【发布时间】:2014-01-09 17:43:59
【问题描述】:

我正在用 Java 创建一个 irc 客户端。它工作正常,但来自服务器的消息有点“混乱” 例如:User1!webirc@1.9.com PRIVMSG #channel :test。所以我想知道如何将 irc 消息解析为人类可读的?这是我为 irc 消息找到的 ^(:(\\S+) )?(\\S+)( (?!:)(.+?))?( :(.+))?$ 的正则表达式。

【问题讨论】:

  • IRC 协议已经是人类可读的。

标签: java irc


【解决方案1】:

这里记录了 IRC 协议:https://www.rfc-editor.org/rfc/rfc2812

2.3.1 增强 BNF 中的消息格式

协议消息必须从连续的流中提取 八位字节。当前的解决方案是指定两个字符,CR 和 LF,作为消息分隔符。空消息被默默地忽略, 它允许在消息之间使用序列 CR-LF,而无需 额外的问题。

提取的消息被解析成组件, 和参数列表 ()。

The Augmented BNF representation for this is:

message    =  [ ":" prefix SPACE ] command [ params ] crlf
prefix     =  servername / ( nickname [ [ "!" user ] "@" host ] )
command    =  1*letter / 3digit
params     =  *14( SPACE middle ) [ SPACE ":" trailing ]
           =/ 14( SPACE middle ) [ SPACE [ ":" ] trailing ]

nospcrlfcl =  %x01-09 / %x0B-0C / %x0E-1F / %x21-39 / %x3B-FF
                ; any octet except NUL, CR, LF, " " and ":"
middle     =  nospcrlfcl *( ":" / nospcrlfcl )
trailing   =  *( ":" / " " / nospcrlfcl )

SPACE      =  %x20        ; space character
crlf       =  %x0D %x0A   ; "carriage return" "linefeed"

【讨论】:

  • xD 那么如何使其易于阅读?正确阅读我的问题
  • 我确实正确阅读了这个问题。做你想做的事情的唯一正确方法是理解协议并提取相关部分,了解它们的含义。如果你想要一个体面的结果,你不能把所有东西都扔掉,它就在那里,因为它意味着什么。您需要做的所有信息都在我的回答中,不过我不会为您编写代码。
  • 仍然没有回答这个问题。如果有人问你如何开瓶,你不给他螺纹规格
猜你喜欢
  • 2016-02-20
  • 2015-08-21
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2011-09-09
  • 2021-07-07
  • 1970-01-01
相关资源
最近更新 更多