正則表達式

什么是正則表達式?

正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為”元字符”)。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串,許多程序設計語言都支持利用正則表達式進行字符串操作。正則表達式是煩瑣的,但它是強大的,學會之后的應用會讓你除了提高效率外,會給你帶來絕對的成就感。正則表達式默認工作在貪婪模式即盡可能長的匹配。
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
程序支持:grep,sed,awk,vim, less,nginx,varnish等
正則表達式按照模式的不同分兩類:基本正則表達式:BRE、擴展正則表達式:ERE
元字符分類:字符匹配、匹配次數、位置錨定、分組
也可以 man 7 regex查看正則表達式的幫助文檔

基本正則表達式

字符匹配

元字符 含義
. 匹配任意單個字符
[] 匹配指定范圍內的任意單個字符([abcd]匹配abcd其中的任任意一個字符)
[ ^ ] 匹配指定范圍外的任意單個字符符([^abcd]:abcd以外的任意字符)
[:upper:] 表示任意的大寫字母
[:alnum:] 表示任意字母和數字符
[:alpha:] 代表任何英文大小寫字符A-Z, a-z
[:lower:] 表示小寫字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…) )
[:digit:] 十進制數字符
[:xdigit:] 十六進制數字符
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號

匹配次數

用在要指定次數的字符后面,用于指定前面的字符要出現的次數

元字符 含義
. 匹配任意單個字符
* 匹配 前面的字符任意次,包括0次
.* 任意 長度的任意字符
\? 匹配 其前面的字符0 或1次
\+ 匹配 其前面的字符至少1次
\{n\} 匹配 前面的字符n次
\{m,n\} 匹配 前面的字符至少m 次,至多n次
\{,n\} 匹配 前面的字符至多n次
\{n,\} 匹配 前面的字符至少n次

位置錨定

元字符 含義
^ 行尾錨定,用于模式的最左側
$ 行尾錨定,用于模式的最右側
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\>或\b 詞首錨定,用于單詞模式的左側
\<或\b 詞尾錨定;用于單詞模式的右側
\<PATTERN\> 匹配整個單詞

分組

\(\)將一個或多個字符捆綁在一起,當作一個整體進行處理
(root)+分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3等
例如: (string1+(string2)*\)
\1 :string1+(string2\)*
\2 :string2
后向引用是引用前面的分組括號中的模式所匹配字符 , 而非模式本身
或者:\|
示例:a\|b: a 或b 、C\|cat: C 或cat、 \(C\|c\ )at:Cat 或cat

擴展正則表達式

擴展正則表達式 ERE Extended Regular Expressions 比基本正則表達式BRE 擁有更強大的功能,語法看起來更加簡潔。

擴展正則的字符匹配

元字符 含義
. 匹配任意單個字符
[] 匹配[]指定范圍內的任意單個字符
[ ^] 匹配[]指定范圍外的任意單個字符符
[:upper:] 任意的大寫字母
[:alnum:] 字母和數字符
[:alpha:] 代表任何英文大小寫字符 A-Z, a-z
[:lower:] 任意的小寫字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…) )
[:digit:] 十進制數字符
[:xdigit:] 十六進制數字符
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號

擴展正則的匹配次數

用在要指定次數的字符后面,用于指定前面的字符要出現的次數

元字符 含義
. 匹配任意單個字符
* 匹配 前面的字符任意次,包括0次
.* 任意 長度的任意字符
? 匹配 其前面的字符0 或1次
+ 匹配 其前面的字符至少1次
{n} 匹配 前面的字符n次
{m,n} 匹配 前面的字符至少m 次,至多n次
{,n} 匹配 前面的字符至多n次
{n,} 匹配 前面的字符至少n次

擴展正則的位置錨定

元字符 含義
^ 行尾錨定,用于模式的最左側
$ 行尾錨定,用于模式的最右側
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\>或\b 詞首錨定,用于單詞模式的左側
\<或\b 詞尾錨定;用于單詞模式的右側
<string> 匹配整個單詞

原創文章,作者:geekdeedy,如若轉載,請注明出處:http://www.www58058.com/77348

(0)
geekdeedygeekdeedy
上一篇 2017-06-01 17:56
下一篇 2017-06-01 21:23

相關推薦

  • 13 文件查找與壓縮

    locate find 壓縮命令 file-roller、compress/uncompress(.Z)、gzip/gunzip(.gz)、bzip2/bunzip2(.bz2)、xz/unxz(.xz) zip/unzip、tar locate 數據源 1)查詢系統上預建的文件索引數據庫      2)依賴于事先構建…

    Linux干貨 2016-08-18
  • PHP異常處理詳解

    PHP異常處理詳解          異常處理(又稱為錯誤處理)功能提供了處理程序運行時出現的錯誤或異常情況的方法。   異常處理通常是防止未知錯誤產生所采取的處理措施。異常處理的好處是你不用再絞盡腦汁去考慮各種錯誤,這為處理某一類錯誤提供了一個很有效的方法,使編程效率大大提高。當異常被觸發時,通常會發生:&…

    Linux干貨 2015-06-02
  • 正則表達式及grep使用

    正則表達式分為:“基本正則表達式 BRE”跟“擴展正則表達式 ERE” 基本正則表達式:     (1)字符匹配               "."任意單個字符 &nbs…

    Linux干貨 2016-07-10
  • Linux的命令使用格式

    ◆Linux命令格式:command [options]  [arguments]command:命令options:  –單詞   或   -單字如: ls –allequ      ls -als -a -b -cequ&…

    Linux干貨 2016-10-31
  • 優云Automation:實現IT服務彈性伸縮的利器

    隨著互聯網業務快速持續增長,IT資源使用量按需變化成為常態,這就要求信息部門能快速響應資源使用的變化要求,對運維提出不小挑戰。比如電商、在線教育等企業經常推出一些秒殺、搶紅包活動,在特定時間段對資源的利用處于高峰期,之后基本處于空閑。 幾年前,我們從申請采購到應用部署上線都只能人工操作,需要提前幾個月開始規劃。如今通過云平臺能很好實現資源按需動態管理,運維人…

    系統運維 2017-03-15
  • suid, sgid, sticky簡介

    SUID屬性 passwd命令可以用于更改用戶的密碼,一般用戶可以使用這個命令修改自己的密碼。但是保存用戶密碼的/etc/shadow文件的權限是000,也就是說只有文件的所有者root用戶可以寫入,那為什么其他用戶也可以修改自己的密碼呢?這就是由于Linux的文件系統中的文件有SUID屬性。 [root@centos6 ~]# ll /etc/shadow…

    Linux干貨 2017-07-27
欧美性久久久久