2013-03-06 30 views
1

如果沒記錯我曾經是能夠做到這一點正則表達式星沒有匹配的

 
$ [[ abc123 =~ ([0-9]*) ]] 

$ echo ${BASH_REMATCH[1]} 

,你可以看到它沒有給出輸出與明星*字符。現在只有在使用加號+字符時纔有效。

$ [[ abc123 =~ ([0-9]+) ]] 

$ echo ${BASH_REMATCH[1]} 
123 

編輯看多奇怪。它將匹配字符串的開頭,但不匹配字符串的末尾。

$ [[ 123abc =~ ([0-9]*) ]] 

$ echo ${BASH_REMATCH[1]} 
123 

回答

4

您的正則表達式返回找到的第一個匹配,即位置0,位於「a」之前,它與空字符串匹配。

*作爲量詞是困難的,因爲如果這是整個表達式,它能夠匹配空字符串,因此它將匹配每個無數位匹配的位置。

所以在字符串「abc123」它匹配4次!

a b c 123 
^^^ ^.. 

第3次很高興匹配空字符串,第四次匹配一系列數字。