2012-03-12 14 views
15

Jak można przekonwertować nazwy z podkreśleniami na nazwy wielbłądów w następujący sposób, używając pojedynczego zapytania pojedynczego wyszukiwania wyrażeń regularnych Java/Perl?Jak przekonwertować z podkreślenia na wielbłądzie z wyrażeniem regularnym?

underscore_variable_name -> underscoreVariableName 
UNDERSCORE_VARIABLE_NAME -> underscoreVariableName 
_LEADING_UNDERSCORE -> leadingUnderscore 

Pytam dla pojedynczych wyrażeń regularnych jest to, że chcę to zrobić przy użyciu Eclipse lub Notepad ++ wyszukiwania i zamiany.

Odpowiedz

20

Some Perl examples:

my $str = 'variable_name, VARIABLE_NAME, _var_x_short, __variable__name___'; 

### solution 1 
$_ = $str; 

$_ = lc; 
s/_(\w)/\U$1/g; 

say; 

### solution 2: multi/leading underscore fix 
$_ = $str; 

$_ = lc; 
s/(?<=[^\W_])_+([^\W_])|_+/\U$1/g; 

say; 

### solution 3: without prior lc 
$_ = $str; 

s/(?<=[^\W_])_+([^\W_])|([^\W_]+)|_+/\U$1\L$2/g; 

say; 

wyjściowa:

variableName, variableName, VarXShort, _variable_name__ 
variableName, variableName, varXShort, variableName 
variableName, variableName, varXShort, variableName 
+0

+1: schludne. Jedynym możliwym sporem jest to, że '_tea_break' stanie się' TeaBreak' zamiast 'teaBreak' lub' _teaBreak'. Ale to posłużyłoby komuś słusznie do używania nazw zaczynających się od podkreślenia. –

+0

@ JonathanLeffler, masz rację i pojawią się problemy, jeśli użyto wielu kolejnych podkreśleń. Zaktualizowano odpowiedź, aby to naprawić. – Qtax

+1

Dzięki, ale ponieważ jest to do użytku w oknie wyszukiwania i zastępowania okien dialogowych, prosiłem o zrobienie tego przy użyciu pojedynczego wyrażenia regularnego. '$ _ = lc' łamie to ograniczenie. Czy możesz wymyślić sposób na ich połączenie? –

2

Jeśli masz już zmienne CamelCase w ciągu, następnie @ odpowiedź Qtax będzie uczynić je małe. Jeśli wszystkie zmienne są małymi literami under_scored następnie można wprowadzić następujące zmiany do # 3: W ->A-Z

's/(?<=[^\A-Z_])_+([^\A-Z_])|([^\A-Z_]+)|_+/\U$1\L$2/g' 
1

Uppercases litery następujące _-:

s/[_-]([a-z])/\u$1/gr