2021-05-12 14:32:11
Linux 正規表示式基礎
一、正規表示式簡介
正規表示式是電腦科學的一個概念。
正規表示式使用單個字串來描述、匹配一系列匹配某個句法規則的字串。
在很多文字編輯器裡,正規表示式通常被用來檢索、替換那些匹配某個模式的文字。
摘自:維基百科
正規表示式在 Linux 系統中無處不在,日常使用的很多命令(如 grep
、awk
)也跟正規表示式脫不開關係。
正規表示式對於某些人來說確實難以理解。
我也只能說:多練吧!想學好的東西,一定可以學會的!
?? 注意
在學習過程中,一定要區分好正規表示式與萬用字元的關係。千萬不要弄混!
本文為個人學習筆記,僅供參考。如有錯誤請及時提出,謝謝!
二、正規表示式中的字元
正規表示式分為普通字元和元字元兩種字元。
形如 a
、b
、1
這些字元均屬於普通字元,只存在字面上的含義,沒有隱含的意義。
為了方便大家理解,下文中的普通字元均使用空心 ??
或實心 ??
的小方格來表示。
元字元是指在正規表示式有著特別意義的字元,比如美元符號 $
表示行尾。
如果需要把元字元當作普通字元來看,請在元字元前面加一個反斜槓 (
{
、}
、<
、>
除外)。
另外,在 SHELL 中使用正規表示式時,最好將正規表示式用單引號括起來,以免正規表示式中的某些字元被 SHELL 視為元字元而影響操作。
三、基本正規表示式
所有支援正規表示式的程式都相容基本正規表示式。
正規表示式 | 含義 |
---|---|
?? |
匹配 ?? 本身 |
. |
匹配任意一個字元 |
??* |
匹配任意多個 ?? (包括 0 個) |
[????] |
匹配 ?? 或 ?? (字元集中的任意一個字元) |
[^????] |
匹配除 ?? 和 ?? (字元集中的任意一個字元)以外的任意一個字元 |
[A-Z] |
匹配一個大寫字母(小寫字母、數位同理,也可取反) |
^ |
匹配行首 |
$ |
匹配行尾 |
??{m} |
匹配 m 個 ?? |
??{m,n} |
匹配 m 至 n 個 ?? |
??{m,} |
匹配至少 m 個 ?? |
<????????> |
精確匹配 ???????? 這個單詞 |
代表性例子
正規表示式 | 可匹配 |
---|---|
gooo*gle |
google 、goooogle |
c.t |
cut 、cat |
aa.*bb |
aabb 、aavvsfbb |
^$ |
一個空行 |
<SSR> |
SSR |
四、POSIX 標準正規表示式
POSIX 正規表示式用來匹配字元集中的其中一個字元,它主要用來消除不同字元編碼之間的差異。
比如說某種字元編碼,它的英文字元排序是 ABCDE...
,那麼此時可以使用 [A-Z]
來匹配任意一個大寫字母。
那如果某種字元編碼,它的英文字元排序是 AaBbCc...
,那麼此時想匹配一個大寫字母就不能再使用 [A-Z]
了。
正規表示式 | 含義 |
---|---|
[[:alnum:]] |
匹配一個數位或字母 |
[[:alpha:]] |
匹配一個字母 |
[[:digit:]] |
匹配一個數位 |
[[:upper:]] |
匹配一個大寫字母 |
[[:lower:]] |
匹配一個小寫字母 |
[[:blank:]] |
匹配一個空格或 Tab |
[[:print:]] |
匹配一個可列印字元 |
五、擴充套件正規表示式
擴充套件正規表示式僅在部分程式中支援,例如 egrep
、awk
等。
正規表示式 | 含義 |
---|---|
??|?? |
匹配 ?? 或 ?? |
??? |
匹配 0 個或 1 個 ?? |
??+ |
匹配至少 1 個 ?? |
??{m} |
匹配 m 個 ?? |
??{m,n} |
匹配 m 至 n 個 ?? |
??{m,} |
匹配至少 m 個 ?? |
(????????) |
匹配 ???????? 這個字串 |
代表性例子
正規表示式 | 可匹配 |
---|---|
A|B |
BOO 、AAB |
goo+gle |
google 、goooogle |
(SS) |
SS 、SSR |
六、區分:萬用字元
這裡說一下萬用字元的用法,大家好好區分一下。
萬用字元 | 含義 |
---|---|
* |
匹配任意數量的任意字元 |
? |
匹配 1 個 任意字元 |
[????] |
匹配 ?? 或 ?? (字元集中的任意一個字元) |
[^????] |
匹配除 ?? 和 ?? (字元集中的任意一個字元)以外的任意一個字元 |
[A-Z] |
匹配一個大寫字母(小寫字母、數位同理,也可取反) |
{??,??} |
匹配括號內 ?? 和 ?? (兩個或多個字串) |
本文永久更新連結地址:http://www.linuxidc.com/Linux/2018-01/150114.htm
相關文章