Linux shell 正則表達式用法

1、“ \  ” 用法

用於關閉其後續字符的特殊含義,恢復字符的本身含義,如:\\ 表示字符 \

2、 “ . " 用法

匹配任意單個字符

3、 " * " 用法

匹配任意字符,可以是單個,也可以是多個,和 ”.“ 字符的去吧是是否可以匹配多個任意字符

4、 "^" 的用法

在行的起始處開始匹配緊接着的字符,如 ^6,匹配行的首字符爲6的行。

5、" $ " 的用法

和 “^” 用法相似,表示在行的結尾處開始匹配字符,如 6$,匹配行的結尾字符爲6的行。

6 、" [ ] " 的用法

匹配某個範圍內的字符方括號表達式,匹配其內部任何字符。其中-表示連續字符的範圍,^符號置於方括號裏第一個字符則有反向的含義,即匹配不在列表內(方括號)的任何字符。如果想讓]和-表示其原意,需要將其放置在方括號的首字符位置,如[]ab]或[-ab],如這兩個字符同時存在,則將]放置在首字符位置,-放置在最尾部,如[]ab-]。

如[a-bA-Z0-9!]表示所有的大小寫字母,數字和感嘆號。[^abc]表示a、b、c之外的所有字符。[Tt]om,可以匹配Tom和tom。 []-] 匹配字符中存儲 ] 或- 的所有字符。

7、 " \{n,m\} " 用法

區間表達式,用於匹配它前面的單個字符重複出現的次數的區間,如\{n\}表示重複n次,\{n,\}表示至少重複n次;\{n,m\}表示重複n到m次。

如:grep 'ab\{2,4\}' * 可以過濾出 abb、abbb和abbbb ;grep 'ab\{2\}' * 可以過濾出 abb、abbb和abbbb

8、 " \(...\) " 用法

圓括號之間的模式存儲在特殊“保留空間”。最多可以將9個獨立的子模式存儲在單個模式中。匹配於子模式的文本,可以通過轉義序列\1到\9,被重複使用在相同模式裏。

如 : \(ab\).*\1表示ab組合出現兩次,兩次之間可存在任何數目的任何字符,如abcdab、abab等,其中 \1 表示匹配 ab

9、 “\b” 的用法

代表着單詞的開頭或結尾,也就是單詞的分界處,如 grep 'he' * 可能會癡線 leh hehe ,但是grep '\bhe\b'  * 只會出現單字符 “he”

轉:

假如你要找的是hi後面不遠處跟着一個Lucy,你應該用\bhi\b.*\bLucy\b。

這裏,.是另一個元字符,匹配除了換行符以外的任意字符。*同樣是元字符,不過它代表的不是字符,也不是位置,而是數量——它指定*前邊的內容可以連續重複使用任意次以使整個表達式得到匹配。因此,.*連在一起就意味着任意數量的不包含換行的字符。現在\bhi\b.*\bLucy\b的意思就很明顯了:先是一個單詞hi,然後是任意個任意字符(但不能是換行),最後是Lucy這個單詞。

10、" \d " 的用法

用來匹配任意一位數字

0\d\d-\d\d\d\d\d\d\d\d匹配這樣的字符串:以0開頭,然後是兩個數字,然後是一個連字號“-”,最後是8個數字(也就是中國的電話號碼。當然,這個例子只能匹配區號爲3位的情形)。

這裏的\d是個新的元字符,匹配一位數字(0,或1,或2,或……)。-不是元字符,只匹配它本身——連字符(或者減號,或者中橫線,或者隨你怎麼稱呼它)。

爲了避免那麼多煩人的重複,我們也可以這樣寫這個表達式:0\d{2}-\d{8}。這裏\d後面的{2}({8})的意思是前面\d必須連續重複匹配2次(8次)。

11、 “\s” 的用法

匹配任意的空白符,包括空格,製表符(Tab),換行符,中文全角空格

12、 “\w” 的用法

匹配字母或數字或下劃線或漢字

以下轉自(正則表達式30分鐘入門教程:http://deerchao.net/tutorials/regex/regex.htm)

\ba\w*\b匹配以字母a開頭的單詞——先是某個單詞開始處(\b),然後是字母a,然後是任意數量的字母或數字(\w*),最後是單詞結束處(\b)。

好吧,現在我們說說正則表達式裏的單詞是什麼意思吧:就是不少於一個的連續的\w。不錯,這與學習英文時要背的成千上萬個同名的東西的確關係不大 :)

\d+匹配1個或更多連續的數字。這裏的+是和*類似的元字符,不同的是*匹配重複任意次(可能是0次),而+則匹配重複1次或更多次。

\b\w{6}\b 匹配剛好6個字符的單詞。

^\d{5,12}$ 這裏的{5,12}和前面介紹過的{2}是類似的,只不過{2}匹配只能不多不少重複2次,{5,12}則是重複的次數不能少於5次,不能多於12次,否則都不匹配。

因爲使用了^和$,所以輸入的整個字符串都要用來和\d{5,12}來匹配,也就是說整個輸入必須是5到12個數字,因此如果輸入的QQ號能匹配這個正則表達式的話,那就符合要求了。

和忽略大小寫的選項類似,有些正則表達式處理工具還有一個處理多行的選項。如果選中了這個選項,^和$的意義就變成了匹配行的開始處和結束處。

13、反義代碼

代碼/語法說明
\W 匹配任意不是字母,數字,下劃線,漢字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數字的字符
\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字符

 

當正則表達式中包含能接受重複的限定符時,通常的行爲是(在使整個表達式能得到匹配的前提下)匹配儘可能多的字符。以這個表達式爲例:a.*b,它將會匹配最長的以a開始,以b結束的字符串。如果用它來搜索aabab的話,它會匹配整個字符串aabab。這被稱爲貪婪匹配。

有時,我們更需要懶惰匹配,也就是匹配儘可能少的字符。前面給出的限定符都可以被轉化爲懶惰匹配模式,只要在它後面加上一個問號?。這樣.*?就意味着匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。現在看看懶惰版的例子吧:

a.*?b匹配最短的,以a開始,以b結束的字符串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字符)和ab(第四到第五個字符)。

表5.懶惰限定符
代碼/語法說明
*? 重複任意次,但儘可能少重複
+? 重複1次或更多次,但儘可能少重複
?? 重複0次或1次,但儘可能少重複
{n,m}? 重複n到m次,但儘可能少重複
{n,}? 重複n次以上,但儘可能少重複

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