用于搜索小写枚举常量的正则表达式
Regex to search for lower-case Enum constants
我正在尝试使用正则表达式来解析小写的枚举,例如:
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*}
在 JAVA 中,将每个 \
转义为另一个 \
解释:
^
- 断言行的开头
enum[^{]*{\s*
- 匹配 enum
后跟 0+ 个非 {
后跟 {
后跟 0+ 个空格的字符,尽可能多尽可能
(?!\b[A-Z]+\b)
- 否定前瞻以确保下一个单词(枚举值)不只包含大写字母
\w+
- 匹配单词字母出现次数超过 1 次(仅当上述否定先行条件为真时)
(?:\s*,\s*(?!\b[A-Z]+\b)\w+)*
- 匹配 0+ 个其他此类枚举值
\s*}
- 匹配 0+ 个空格后跟 }
由于您在此标记了 checkstyle,因此您可以使用 sevntu 中的自定义检查来为您的枚举常量强制执行特定的命名约定。不需要复杂的正则表达式。
<module name="EnumValueNameCheck">
<property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
</module>
这将强制所有枚举常量为大写字母和数字并允许下划线。
您必须在项目中包含 sevntu 才能使用自定义检查,方法是通过 maven 或在命令行中附加 jar 等...
我正在尝试使用正则表达式来解析小写的枚举,例如:
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*}
在 JAVA 中,将每个 \
转义为另一个 \
解释:
^
- 断言行的开头enum[^{]*{\s*
- 匹配enum
后跟 0+ 个非{
后跟{
后跟 0+ 个空格的字符,尽可能多尽可能(?!\b[A-Z]+\b)
- 否定前瞻以确保下一个单词(枚举值)不只包含大写字母\w+
- 匹配单词字母出现次数超过 1 次(仅当上述否定先行条件为真时)(?:\s*,\s*(?!\b[A-Z]+\b)\w+)*
- 匹配 0+ 个其他此类枚举值\s*}
- 匹配 0+ 个空格后跟}
由于您在此标记了 checkstyle,因此您可以使用 sevntu 中的自定义检查来为您的枚举常量强制执行特定的命名约定。不需要复杂的正则表达式。
<module name="EnumValueNameCheck">
<property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
</module>
这将强制所有枚举常量为大写字母和数字并允许下划线。
您必须在项目中包含 sevntu 才能使用自定义检查,方法是通过 maven 或在命令行中附加 jar 等...