java - 如何解析 Java 中由关键字分隔的日志行?

标签 java regex parsing key-value matcher

我正在开发一个日志解析器,它应该像这样解析一行:

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/

相关文章:

java - Vaadin 将新列添加到现有表

regex - 崩溃计划和正则表达式 - 根据文件名排除文件

iphone - 使用嵌套对象检测缺失的 JSON 键

iphone - 使用 GDataXMLDocument 解析 xml 属性

java - 如何将 1 亿行加载到内存中

java - 比较列表元素的最佳方法

java - Android中的泄漏窗口异常

javascript - 正则表达式代码在 Internet Explorer 上不起作用

JavaCC - 匹配除其他一些单词之外的一些单词

jQuery 帮助 - 将 XML 解析为数组