Верхний и нижний корпус верблюда

Я пытаюсь придумать регулярное выражение для верхнего и нижнего регистра Camel.

Вот что я пробовал

(([A-Z][a-z0-9]*){2,}|([a-z][A-Z0-9]*){2,})

Попытка сопоставить верхний регистр верблюда с этим - ([A-Z] [a-z0-9] ) {2,}, но он также соответствует другим комбинациям. То же самое и со второй частью - ([a-z] [A-Z0-9]) {2,})


person Ankit    schedule 26.09.2013    source источник
comment
Что означает {2,}? что однобуквенные переменные запрещены?   -  person SWeko    schedule 26.09.2013
comment
Это необходимо, чтобы убедиться, что ([A-Z] [a-z0-9] *) или ([a-z] [A-Z0-9] *) встречается как минимум дважды. @SWeko   -  person Ankit    schedule 26.09.2013
comment
не могли бы вы привести несколько примеров текста, с которым вы тестируете?   -  person JackDev    schedule 26.09.2013
comment
Верхний футляр для верблюда - CamelCase1 Нижний футляр для верблюда - camelCase2 @JackDev   -  person Ankit    schedule 26.09.2013


Ответы (2)


Это совпадет с фразами в верхнем и нижнем регистре, содержащими хотя бы один верхний регистр в слове.

Верхний чехол Camel

[A-Z][a-z0-9]*[A-Z0-9][a-z0-9]+[A-Za-z0-9]*

пример: HelloWorld, AQuickBrownFox

Нижний регистр верблюда

[a-z]+[A-Z0-9][a-z0-9]+[A-Za-z0-9]*

пример: helloWorld, aQuickBrownFox

person JackDev    schedule 26.09.2013
comment
Таким образом, в UpperCamelCase будет совпадать только UpperCamel. Это намеренно? Тогда, разве вы не хотите использовать привязки границ слов, чтобы не совпадать ( подстрока) thisIsNotUpperCamelCase с вашим первым регулярным выражением? Кроме того, это должно быть [A-Z], а не [A-Z0-9]. Наконец (и OP не упомянул об этом), что насчет имен переменных, отличных от ASCII? Многие языки допускают использование символов Unicode для имен переменных. - person Tim Pietzcker; 26.09.2013
comment
Но RegEx lowerCamelCase также соответствует таким строкам, как A или даже ABC! Думаю, скорее должно быть [a-z]+[A-Z0-9][a-z0-9]*. Обратите внимание на + вместо *. - person gehho; 26.09.2013
comment
также обновил мое регулярное выражение для обработки более сложных совпадений. - person JackDev; 27.09.2013

Для lowerCamelCase вам понадобятся:

  1. Нижний регистр
  2. хотя бы один (lowerCaseLetter или UpperCaseLetter или numb3r)

Таким образом, подходящее регулярное выражение будет

[a-z][a-zA-Z0-9]+

Аналогично для UpperCamelCase у вас будет [A-Z][a-zA-Z0-9]+, и если вы сгруппируете их, вы получите

[a-zA-Z][a-zA-Z0-9]+

Изменить: если вы строго требуете, чтобы слово было словом верблюжьего регистра, необходимо иметь "горб", где горб - это заглавная буква или число, вам нужно:

  1. Заглавная или строчная буква, за которой следует
  2. Другие строчные буквы (возможно, нет), за которыми следует
  3. Горб, за которым следует
  4. Другие строчные буквы (возможно, нет),
  5. Может быть, за ним последует еще один горб (ы)

Тогда ваше регулярное выражение:

[a-zA-Z][a-z]*([A-Z0-9]+[a-z]*)+

Regex fiddle

person SWeko    schedule 26.09.2013
comment
Но это также будет соответствовать aa, что не относится к случаю верблюда, верно? - person Ankit; 26.09.2013
comment
это если это одно слово. lowerCamelCase для переменной с именем lower - lower. Постарайтесь получить строгое определение для нижнего / UpperCamelCase. Тогда регулярное выражение запишется само. - person SWeko; 26.09.2013
comment
Я хочу сопоставить такие тексты, как Upper camel case - CamelCase1 и camelCase2 для нижнего ящика верблюда! - person Ankit; 26.09.2013
comment
Они действительно совпадают как с моим регулярным выражением, так и с регулярным выражением, которое вы дали. (refiddle.com/gvg) - person SWeko; 26.09.2013
comment
Разве это регулярное выражение не должно соответствовать только регистру Camel, а не другим словам, таким как aa и т. Д.? Но в данном случае это также совпадающие слова, кроме падежей с верблюжьими буквами. Что вы думаете? - person Ankit; 26.09.2013
comment
Ах, прости. Таким образом, слово используется только в верблюжьем регистре, когда есть реальный горб, поэтому нижний и верхний не совпадают. Считается ли число горбиком, т. Е. Должно совпадать lower8, lower8Upper, lower8lower или lower8UPPER? - person SWeko; 26.09.2013
comment
Думаю, может быть. - person Ankit; 26.09.2013