2014-01-09 17 views
1

我正在用Java創建一個irc客戶端。它工作正常,但來自服務器的消息有點「搞砸」 ,例如:[email protected] PRIVMSG #channel :test。所以我想知道如何解析irc消息給人類可讀?這是一個正則表達式,我發現^(:(\\S+))?(\\S+)((?!:)(.+?))?(:(.+))?$ irc消息。Java - 如何解析irc消息給人們可讀的

+0

IRC協議已經是人類可讀的。 –

回答

1

IRC協議記錄在這裏:在增強BNF

的協議消息https://tools.ietf.org/html/rfc2812

2.3.1消息格式必須從 八位連續流中提取。目前的解決方案是將兩個字符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" 
+0

xD然後如何讓它變得人性化?正確閱讀我的問題 – Jeremy

+2

我確實正確地閱讀了這個問題。做你想做的唯一正確的方法是理解協議並提取相關部分,瞭解它們的含義。如果你想得到一個體面的結果,你不能扔掉一切,它在那裏,因爲它意味着什麼。所有你需要做的信息都在我的答案中,但我不會爲你寫代碼。 –

+0

仍然沒有回答這個問題。如果有人問你如何打開一個瓶子,你不給他一個螺紋的規格 – benez