java - 用于搜索小写枚举常量的正则表达式

标签 java android regex enums checkstyle

我正在尝试使用正则表达式来解析小写的枚举,例如:

 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
    }

如有任何帮助,我们将不胜感激。

最佳答案

试试这个正则表达式:

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

Click for Demo

在 JAVA 中,将每个 \ 转义为另一个 \

解释:

  • ^ - 断言行的开始
  • enum[^{]*{\s* - 匹配 enum 后跟 0+ 次非 { 的任何字符后跟 { 后跟 0+ 个空格,尽可能多
  • (?!\b[A-Z]+\b) - 否定前瞻以确保下一个单词(枚举值)不只包含大写字母
  • \w+ - 匹配出现 1 次以上的单词字母(仅当上述否定先行条​​件为真时)
  • (?:\s*,\s*(?!\b[A-Z]+\b)\w+)* - 匹配 0+ 个其他此类枚举值
  • \s*} - 匹配 0+ 个空格后跟 }

关于java - 用于搜索小写枚举常量的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54434100/

相关文章:

java - 使用 JSch 通过 Jumphost 连接到远程主机时为 "reject HostKey"

java - 无法在未调用的线程上 toast ,RxJava2

php - str_replace + 正则表达式

java - 无法从客户端进行 JAX-RPC Web 服务调用

java - 在 servicemix 中安装功能

Android:如果应用程序是后台的,如何popBackStack Fragment?

r - 将全角字符串转换为半角字符串

ruby-on-rails - 当按钮的名称以相同的词开头时,如何使用 Cucumber/webrat 单击特定按钮?

java - selenium webdriver xpath 按索引搜索

android - 用于动态布局的 XML 解析器(动态加载的皮肤)