gpt4 book ai didi

java - 从规范类名解析 Java 包和类名的正则表达式

转载 作者:搜寻专家 更新时间:2023-10-31 20:08:29 25 4
gpt4 key购买 nike

我正在配置一个使用正则表达式解析日志的日志解析系统 (Logstash)。我正在尝试从规范的(即完全限定的)Java 类名中解析出包名和类名,但我不太正确。

这里有一些示例输入

  1. UnpackagedClass
  2. somepackage.SomeClass
  3. java.lang.Object
  4. java.util.function.Function

预期输出(捕获组):

  1. (空字符串),UnpackagedClass
  2. somepackage, SomeClass
  3. java.lang, 对象
  4. java.util.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_$]*))。它很接近,但是在包名称之后有尾随句点,它们被捕获为包名称的一部分:

  1. (空字符串),UnpackagedClass
  2. somepackage., SomeClass
  3. java.lang., 对象
  4. java.util.function., 函数

关于如何改进它有什么建议吗?这是 a RegExr playground帮助你😊。

最佳答案

使用:(?:(X(?:\.X)*)\.)?(X)

它将在第 1 组中包含包名(如果未命名,则为 null),在第 2 组中包含类名。

参见 regex101.com用于演示。

关于java - 从规范类名解析 Java 包和类名的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51344688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com