1. 程式人生 > >如何用正則表示式表示非“字串”

如何用正則表示式表示非“字串”

剛才遇到這樣一個問題,一個檔案目錄下有不少檔案,有些是.txt字尾結尾的,我想選出所有非.txt結尾的檔案來,linux下自然是想用grep來解決這個問題,首先:

ls|grep [^/.txt]$

但是發現這樣做是不對的,[]表示的是或,^表示的是否定,其實這是匹配了結尾非.、或非t、或非x的檔案,假設又一個檔名為a.x,這個檔案也將被排除掉,這不是我想要的結果。

其實可以用-v引數來做到這一點

ls|grep [/.txt]$    是匹配所有後綴為.txt的檔案

ls|grep -v [/.txt]$    則是匹配所有後綴不是.txt的檔案

不過,用-v是一個取巧的辦法,不是純的正則表示式的解決辦法,繼續探索ing。。。

ps:

在perl或支援perl的正則表示式的語言(如php)中,可以用前看宣告來做到這一點,正則表示式是:/.*(?!/.txt)$/

意思是匹配所有不以.txt結尾的名字