2012-06-24 62 views
1

我想了解以下3個正則表達式的區別:正則表達式表達的差異

我想顯示在僅包括在其中小寫字母組成的文件中的所有行。

這裏是3的正則表達式我嘗試:

cat filename.txt | grep ^[a-z]* 

正則表達式描述:這將顯示從0開始或多個小寫字母的所有行。因此,它將匹配以下任一項:

zapato 
113078 
OLIVIA 

不完全是我們想要的。

cat filename.txt | grep ^[a-z]*$ 

正則表達式描述:這將顯示從0開始或多個小寫字母直至行尾的所有行。這匹配以下內容:

fubuki 
BALLIN 
Kristine 

這次沒有數字結果。

cat filename.txt | grep ^[a-z]*[a-z]$ 

正則表達式描述:這一個很適合我。它搜索所有以0或更多小寫字母開頭的行,並且匹配它直到找到另一個小寫字母。出於某種原因,這對我很有用。但是,我想知道這與以前的正則表達式有何不同。

tonia 
ecurby 
totonno 

此外,當在正則表達式的星號()指,0以上,那麼它應該包括所有的結果時,我寫,^ [AZ]

回答

4

短您的常規的解釋表達式:

^[a-z]* 

匹配串從[a-z]從0開始或多個字符。
匹配字符串和每個字符串開頭字符集[a-z]。含無非是0個或更多字符從[a-z]


^[a-z]*$ 

匹配的字符串。
比賽字符串和每個字符串只包含只有字符集[a-z]


^[a-z]*[a-z]$ 

匹配字符串開始從[a-z] 0個或更多字符,然後從[a-z]只有一個最後一個字符。
不匹配包含的字符串集合的字符[a-z]


使用這個代替目前的第三個選項:

^[a-z]+$ 

這是語義上等效但更簡單。

表達x*x(或xx*)等同於在正則表達式x+(與x是任何表達)。後者基本上只是前面更冗長的表達式的語法糖。

或者換句話說:當*意味着0以上+意味着1以上


+0

謝謝。但爲什麼,^ [a-z] * $也匹配所有大寫字母。他們不屬於字符集,[a-z]? –

+0

然後,您的**匹配**以某種方式設置爲**不區分大小寫**。 **正則表達式本身**是**區分大小寫**。檢查你的設置/ api。 – Regexident