首頁 > 軟體

Linux 正規表示式基礎

2020-06-16 16:57:56

一、正規表示式簡介

正規表示式是電腦科學的一個概念。
正規表示式使用單個字串來描述、匹配一系列匹配某個句法規則的字串。
在很多文字編輯器裡,正規表示式通常被用來檢索、替換那些匹配某個模式的文字。
摘自:維基百科

正規表示式在 Linux 系統中無處不在,日常使用的很多命令(如 grepawk)也跟正規表示式脫不開關係。

正規表示式對於某些人來說確實難以理解。

我也只能說:多練吧!想學好的東西,一定可以學會的!

?? 注意
在學習過程中,一定要區分好正規表示式與萬用字元的關係。千萬不要弄混!
本文為個人學習筆記,僅供參考。如有錯誤請及時提出,謝謝!


二、正規表示式中的字元

正規表示式分為普通字元和元字元兩種字元。

形如 ab1 這些字元均屬於普通字元,只存在字面上的含義,沒有隱含的意義。

為了方便大家理解,下文中的普通字元均使用空心 ?? 或實心 ?? 的小方格來表示。

元字元是指在正規表示式有著特別意義的字元,比如美元符號 $ 表示行尾。

如果需要把元字元當作普通字元來看,請在元字元前面加一個反斜槓 {}<> 除外)。

另外,在 SHELL 中使用正規表示式時,最好將正規表示式用單引號括起來,以免正規表示式中的某些字元被 SHELL 視為元字元而影響操作。


三、基本正規表示式

所有支援正規表示式的程式都相容基本正規表示式。

正規表示式含義
?? 匹配 ?? 本身
. 匹配任意一個字元
??* 匹配任意多個 ?? (包括 0 個)
[????] 匹配 ????(字元集中的任意一個字元)
[^????] 匹配除 ????(字元集中的任意一個字元)以外的任意一個字元
[A-Z] 匹配一個大寫字母(小寫字母、數位同理,也可取反)
^ 匹配行首
$ 匹配行尾
??{m} 匹配 m 個 ??
??{m,n} 匹配 m 至 n 個 ??
??{m,} 匹配至少 m 個 ??
<????????> 精確匹配 ???????? 這個單詞

代表性例子

正規表示式可匹配
gooo*gle googlegoooogle
c.t cutcat
aa.*bb aabbaavvsfbb
^$ 一個空行
<SSR> SSR

四、POSIX 標準正規表示式

POSIX 正規表示式用來匹配字元集中的其中一個字元,它主要用來消除不同字元編碼之間的差異。

比如說某種字元編碼,它的英文字元排序是 ABCDE...,那麼此時可以使用 [A-Z] 來匹配任意一個大寫字母。

那如果某種字元編碼,它的英文字元排序是 AaBbCc...,那麼此時想匹配一個大寫字母就不能再使用 [A-Z] 了。

正規表示式含義
[[:alnum:]] 匹配一個數位或字母
[[:alpha:]] 匹配一個字母
[[:digit:]] 匹配一個數位
[[:upper:]] 匹配一個大寫字母
[[:lower:]] 匹配一個小寫字母
[[:blank:]] 匹配一個空格或 Tab
[[:print:]] 匹配一個可列印字元

五、擴充套件正規表示式

擴充套件正規表示式僅在部分程式中支援,例如 egrepawk 等。

正規表示式含義
??|?? 匹配 ????
??? 匹配 0 個或 1 個 ??
??+ 匹配至少 1 個 ??
??{m} 匹配 m 個 ??
??{m,n} 匹配 m 至 n 個 ??
??{m,} 匹配至少 m 個 ??
(????????) 匹配 ???????? 這個字串

代表性例子

正規表示式可匹配
A|B BOOAAB
goo+gle googlegoooogle
(SS) SSSSR

六、區分:萬用字元

這裡說一下萬用字元的用法,大家好好區分一下。

萬用字元含義
* 匹配任意數量的任意字元
? 匹配 1 個 任意字元
[????] 匹配 ????(字元集中的任意一個字元)
[^????] 匹配除 ????(字元集中的任意一個字元)以外的任意一個字元
[A-Z] 匹配一個大寫字母(小寫字母、數位同理,也可取反)
{??,??} 匹配括號內 ???? (兩個或多個字串)

本文永久更新連結地址http://www.linuxidc.com/Linux/2018-01/150114.htm


IT145.com E-mail:sddin#qq.com