Регулярное выражение, соответствующее регистру Camel и Pascal

StackOverflow https://stackoverflow.com/questions/2103596

Вопрос

Я собираюсь написать синтаксический анализатор для языка, который должен иметь строгие синтаксические правила относительно именования типов, переменных и тому подобного.Например, все классы должен быть 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]*)

Это должно сработать для :

  1. Сделано легко
  2. Чудесно
  3. И я

это виды скороговорок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top