Linux shell Regex用法

來源:互聯網
上載者:User

標籤:des   style   http   使用   strong   io   art   代碼   

  

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” 的用法

匹配字母或數字或底線或漢字

以下轉自(Regex30分鐘入門教程:http://deerchao.net/tutorials/regex/regex.htm)

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

好吧,現在我們說說Regex裡的單詞是什麼意思吧:就是不少於一個的連續的\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號能匹配這個Regex的話,那就符合要求了。

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

13、反義代碼

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

 

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

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

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.