2012-03-12 107 views
15

如何使用single將 Java/Perl正則表達式的搜索和替換轉換爲帶有下劃線的名稱,如下所示的駱駝案例名稱?如何使用正則表達式將下劃線轉換爲駱駝大小寫?

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

我之所以問一個正則表達式是我想做到這一點使用Eclipse或記事本+ +搜索和替換。

回答

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; 

輸出:

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

+1:整潔。關於唯一可能的詭計是'_tea_break'會變成'TeaBreak'而不是'teaBreak'或'_teaBreak'。但是,這將有助於使用以下劃線開頭的名字。 – 2012-03-12 15:38:43

+0

@JonathanLeffler,你說得對,如果使用了多個連續的下劃線,那麼也會出現問題。更新瞭解決該問題的答案。 – Qtax 2012-03-12 15:49:01

+1

謝謝,但因爲這是用於編輯器搜索和替換對話框,我要求使用一個正則表達式來完成此操作。 '$ _ = lc'打破了這個限制。你能想出一種方法來結合它們嗎? – 2012-03-12 15:50:12

2

如果你已經在字符串中駝峯變量,然後@ Qtax的答案會讓他們小寫。如果你所有的變量都是小寫under_scored那麼你可以進行以下修改#3:W - 以下_->A-Z

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

字母轉換爲大寫:

s/[_-]([a-z])/\u$1/gr 
相關問題