使用Regex处理UGC中的引号

时间:2015-02-04 06:30:04

标签: java regex

我正在为我感兴趣的游戏编写日志解析器,当用户的用户名中有双引号时,我遇到了问题。以下行是没有双引号的用户名示例,以便为问题提供一些上下文:

L 02/02/2015 - 20:30:17: "bowser<10><[USERID]><Blue>" triggered "damage" against "mario<3><[USERID2]><Red>" (damage "50") (realdamage "37") (weapon "sniperrifle")

使用我当前的正则表达式\\\"(.*?)\\\"它运作正常。我能够识别第一个用户名(bowser),事件(损坏)和第二个用户名(mario),以及损坏和realdamage值。但是,当用户在其名称中使用引号时会引入此问题,就像bowser在此行中所做的那样:

L 02/02/2015 - 20:30:36: "mario<7><[USERID]><Blue>" triggered "damage" against "bowser -"The Ship Sets Sail"<12><[USERID2]><Red>" (damage "60") (realdamage "10") (weapon "sniperrifle")

当我解析该行时,我得到第一个名称正确,并且事件名称正确。但是,当我读到第二个名字时,我得到bowser -,当我读到损坏时,我得到<12><[USERID2]><Red>导致NumberFormatException

  1. 目前尚不知道用户名称中会有多少引号
  2. 不知道用户的名字是否包含其他可能与其他解析相混淆的字符(我设置了角括号以及括号)
  3. 不知道用户姓名的长度
  4. 我希望在正确的方向上提供一些提示。

1 个答案:

答案 0 :(得分:0)

我通过使用不太可能发生的常量隔离名称来解决问题,然后我将用户名存储在List<Player>中,并在提取信息之前清理每一行,以防止出现脏字。