Regex для поиска строчных констант Enum - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь использовать регулярное выражение для разбора перечислений в нижнем регистре, например:

 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 ]

0 голосов
/ 30 января 2019

Поскольку вы пометили здесь контрольный стиль, вы можете использовать пользовательскую проверку из sevntu , чтобы обеспечить соблюдение определенного соглашения об именах для констант перечисления.Сложное регулярное выражение не требуется.

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

Это заставит все константы перечисления быть заглавными буквами и цифрами и разрешить подчеркивание.

Вы должны будете включить sevntu в ваш проект, чтобы использоватьпользовательской проверки, либо через maven, либо добавив jar в командную строку и т. д ...

0 голосов
/ 30 января 2019

Попробуйте это регулярное выражение:

^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+ пробелов, за которыми следует }
...