正則表達式通配符組合.*與*.的區別

有這麼四行數據
1.this line is empty
2.this line +empty
3.this line.empty
4.this lineempty

如果使用grep ‘line.*e’ 來進行檢索的話,四行數據都可以檢索出來;
但是如果使用grep ‘line*.e’ 來進行檢索的話,則只能檢索出後兩行;

其實這還得從通配符.和*所表示的含義說起。

通配符 含義
. 匹配除了換行符以外任意一個字符
* 前一個字符匹配0次或任意多次

那麼,
grep ‘line.*e’ 表示“line”後緊跟任意一個除換行符以外的字符,然後這個字符出現0次或者任意多次都可以,然後出現字符額,所以這四行數據都滿足要求;
grep ‘line*.e’表示“line”後出現0次或者任意多次的字母e,然後再緊跟任意一個除換行符以外的字符,之後再緊跟一個字母e。第一行line後0個e緊跟空格符,之後是i,不是e,所以不符合要求。第二行第一行line後0個e緊跟空格符,之後是+,不是e,所以也不符合要求。只有第三行和第四行是符合要求的。

對於正則表達式來說,單個通配符的意義看似容易理解,只有理解透徹才能明白他們組合起來所表達的真實意思。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章