我正在用Java创建一个irc客户端。它工作正常,但来自服务器的消息有点“混乱”
例如:User1!webirc@1.9.com PRIVMSG #channel :test
。所以我想知道如何将irc消息解析为人类可读的?这是我为irc消息找到^(:(\\S+) )?(\\S+)( (?!:)(.+?))?( :(.+))?$
的正则表达式。
答案 0 :(得分:1)
此处记录了IRC协议:https://tools.ietf.org/html/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"