Регулярное выражение, соответствующее регистру Camel и Pascal
-
21-09-2019 - |
Вопрос
Я собираюсь написать синтаксический анализатор для языка, который должен иметь строгие синтаксические правила относительно именования типов, переменных и тому подобного.Например, все классы должен быть PascalCase, и все имена переменных / параметров и другие идентификаторы должен будь верблюдом.
Например HTMLParser
не допускается и должен быть назван HtmlParser
.Есть какие-нибудь идеи для регулярного выражения, которое может соответствовать чему-то, что является PascalCase, но в нем нет двух заглавных букв?
Решение
Кейс для верблюдов:
^[a-z]+(?:[A-Z][a-z]+)*$
Паскаль - Кейс:
^[A-Z][a-z]+(?:[A-Z][a-z]+)*$
Другие советы
/([A-Z][a-z]+)*[A-Z][a-z]*/
Но я должен сказать, что ваш выбор именования отвратителен, HTMLParser должен быть разрешен и предпочтителен.
Я не верю, что перечисленные элементы могут начинаться с цифр (кажется, я где-то это читал, так что отнеситесь к этому с недоверием), поэтому лучшим вариантом было бы что-то вроде Roger Pate с несколькими незначительными изменениями (на мой взгляд)
/([A-Z][a-z0-9]+)*[A-Z][a-z0-9]*/
Должно быть что-то вроде: Ищите заглавную букву, затем по крайней мере один маленький регистр или цифру или больше, а также похоже, что он обрабатывает только заглавную букву, поскольку это кажется необходимым, но дополнительные буквы необязательны.
Удачи
^[A-Z][a-z]*([A-Z][a-z]*)
Это должно сработать для :
- Сделано легко
- Чудесно
- И я
это виды скороговорок.