亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式搜索小寫枚舉常量

正則表達式搜索小寫枚舉常量

小唯快跑啊 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 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號