我正在配置一个使用正则表达式解析日志的日志解析系统(Logstash)。我正在尝试从规范的(即完全限定的)Java类名中解析出一个包名和类名,但是我不太清楚。
以下是一些示例输入
UnpackagedClass
somepackage.SomeClass
java.lang.Object
java.util.function.Function
预期的输出(捕获组):
UnpackagedClass
somepackage
,SomeClass
java.lang
,Object
java.util.function
,Function
这是我尝试的方法:((?:(?:X)\.)*)((?:X))
,其中X
是[a-zA-Z_$][a-zA-Z\d_$]*
,它是Java标识符的正则表达式。完全展开,它是:((?:(?:[a-zA-Z_$][a-zA-Z\d_$]*)\.)*)((?:[a-zA-Z_$][a-zA-Z\d_$]*))
。已经结束了,但是在软件包名称后面有一段尾随的时期,它们被捕获为软件包名称的一部分:
UnpackagedClass
somepackage.
,SomeClass
java.lang.
,Object
java.util.function.
,Function
关于如何改善此问题的任何建议? a RegExr playground可以为您提供帮助。
答案 0 :(得分:4)