为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式搜索小写枚举常量

正则表达式搜索小写枚举常量

小唯快跑啊 2022-05-25 17:07:48
我正在尝试使用正则表达式来解析小写的枚举,例如: enum TransparencyState {        Gone, Translucent, Opaque    }或者 enum TransparencyState {        gone,         translucent,         opaque    }但是,我能得到的最接近的是(?:enum\s+[a-zA-Z0-9]+\s*\{|\G)\s+([a-zA-Z0-9_,\s]*)(?=[^{}]*\}),但这并不完全有效。理想情况下,它只会匹配枚举列表中的小写常量,除了所有大写字母(基本上是如下所示的常量形式)。它不匹配: enum TransparencyState {        GONE, TRANSLUCENT, OPAQUE_OR_DULL    }任何帮助将不胜感激。
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

试试这个正则表达式:

^enum[^{]*{\s*(?!\b[A-Z]+\b)(\w+(?:\s*,\s*(?!\b[A-Z]+\b)\w+)*)\s*}

点击演示

在 JAVA 中,相互\转义\

解释:

  • ^- 断言行首

  • enum[^{]*{\s*- 匹配enum后跟 0+ 次出现的任何非 a{后跟 a{后跟 0+ 空格的字符,尽可能多

  • (?!\b[A-Z]+\b)- 负前瞻以确保下一个单词(枚举值)不只包含大写字母

  • \w+- 匹配 1+ 个单词字母(仅当上述否定前瞻条件为真时)

  • (?:\s*,\s*(?!\b[A-Z]+\b)\w+)*- 匹配 0+ 个其他此类枚举值

  • \s*}- 匹配 0+ 个空格,后跟一个}


查看完整回答
反对 回复 2022-05-25
?
繁花如伊

TA贡献2012条经验 获得超12个赞

由于您在其中标记了 checkstyle,因此您可以使用sevntu的自定义检查来为您的枚举常量强制执行特定的命名约定。不需要复杂的正则表达式。

    <module name="EnumValueNameCheck">
        <property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
    </module>

这将强制所有枚举常量为大写字母和数字,并允许使用下划线。

您必须在项目中包含 sevntu 才能使用自定义检查,通过 maven 或在命令行中附加 jar 等...


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信