2010-09-08 162 views
1

後發現封信,我想編寫使用的Unix命令,正則表達式識別所有字符串不確認以下格式正則表達式下劃線

First Leter is UpperCase  
Followed by any number of letters 
Underscore 
Followed by UpperCase Letter 
Followed by any number of letters 
Underscore 
and so on ............. 

下劃線的數量是可變的

So valid ones are          Invalid ones are 
Alpha_Beta_Gamma          alph_Beta_Gamma 
Alpha_Beta_Gamma_Delta        Alpha_beta_Gamma 
Alppha_Beta           Alpha_beta 
Aliph_Theta_Pi_Chi_Ming        Alpha_theta_Pi_Chi_Ming 
+0

「A_B_C」有效還是無效? 「ABC」呢? 'Abc'? 'AB_CD'?空的字符串? – 2010-09-08 13:51:24

+0

A_B_C有效ABC無效Abc也無效,AB_CD無效應該是Ab_Cd – lisa 2010-09-08 14:05:16

回答

4

grep有一個-v選項,它反轉匹配(即返回不匹配的行)。 -E選項將grep置入extended-regexp模式(允許+和圓括號在模式中未轉義)。

可以使用的模式(分解爲清楚起見):

^    # beginning of string 
    [A-Z]  # a single uppercase letter 
    [a-z]*  # zero or more lowercase letters 
    (   # start a group 
    _   # an underscore 
    [A-Z]  # a single uppercase letter 
    [a-z]*  # zero or more lowercase letters 
)+   # close the group and it can appear one or more times 
$    # end of string 

因此,假設您有一個包含從你的問題你的8串的文件test.dat

grep -E -v "^[A-Z][a-z]*(_[A-Z][a-z]*)+$" test.dat 

返回:

alph_Beta_Gamma 
Alpha_beta_Gamma 
Alpha_beta 
Alpha_theta_Pi_Chi_Ming 
+0

Daniel非常感謝您 – lisa 2010-09-08 14:07:16

+0

感謝您的解釋 – lisa 2010-09-08 14:12:55

+0

'[az]'後的'+'需要'*'匹配'A_B_C'。 – Omnifarious 2010-09-08 14:41:13

相關問題