我正在开发一个日志解析器,它应该像这样解析一行:
ID1 : 0 ID2 : 214 TYPE : ERROR DATE : 2012-01-11 14:08:07.432 CLASS : Maintenance SUBCLASS : Operations
ID1、ID2、TYPE、DATE、CLASS 和 SUBCLASS 都是关键字,我想要这样的东西:
ID1 : 0
ID2 : 214
TYPE : ERROR
DATE : 2012-01-11 14:08:07.432
CLASS : Maintenance
SUBCLASS : Operations
我对正则表达式真的很陌生,我有以下内容:
(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)\\s*:\\s*(.+?)\\s*[(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)]
当然不行。
任何建议将不胜感激。
最佳答案
表达式中的主要问题是方括号,它们创建了一个 character class , 这恰好匹配里面的一个字符。
(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)\\s*:\\s*(.+?)\\s*[(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)]
^ ^
我最后也做了交替 positive lookahead assertion (以 ?=
开头的组),所以这不匹配,只是确保其中一个选项在前面。我还将字符串 $
的末尾添加到交替中。
(ID1|ID2|TYPE|DATE|CLASS|SUBCLASS)\\s*:\\s*(.+?)\\s*(?=ID1|ID2|TYPE|DATE|CLASS|SUBCLASS|$)
查看here on Regexr ,测试正则表达式的好工具!
关于java - 如何解析 Java 中由关键字分隔的日志行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783733/