正則表達式

什么是正則表達式?

正則表達式(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

相關推薦

  • 玩轉linux之啟動篇

        想要玩轉linux,首先明白其啟動流程,這里簡單說明一下: CentOS 6啟動流程:    POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> roo…

    Linux干貨 2016-09-26
  • 命令,Linux的獨特魅力

    轉眼又學了一個星期,那就來分享一下這個星期所學的知識吧! 這個星期學的都是各種命令,而這些命令就如同windoes里面畫面上的各種選項,沒有這些命令,那么你對它將無從下手。那下面就來看看這些命令的強大功能 help   man help(內部命令幫助),等同于man(外部命令幫助)。當你對一個命令不熟悉時,這兩個命令將是你的救命符 選定一個命令,先…

    2017-07-22
  • centos7源碼編譯安裝Apache2.4.25服務

    ?一、源碼包下載 ?二、安裝開發環境以及編譯環境 ?三、編譯安裝以及報錯排查 ?四、調試Apache服務 前言: 本文主要介紹了在Centos7環境中如何通過源碼編譯的方式安裝Apache服務(也就是我們的httpd服務)由于本文整理時間有限,所以難免有些紕漏之處,歡迎大家在閱讀后在評論區指出,本人看到會在第一時間修改文中錯誤的地方。 為什么要進行源碼編譯安…

    2017-04-22
  • awk用法三

      6、結構化控制語句     6.1 if語句       格式:if(條件) {body} else {else body}         實例1:判斷/etc/passwd文件中的UID如果大于500則顯示為“common user”,否則顯…

    Linux干貨 2016-02-14
  • 循環 函數 軟件包 【中】

    循環 函數 軟件包  【中】  創建無限循環 while true; do     循環體 ? done ? until false; do     循環體 ? Done 特殊用法 ?while循環的特殊用法(遍歷文件的每一行):      &nbs…

    Linux干貨 2016-08-21
  • Linux之磁盤管理

    Linux之磁盤管理       linux系統中, 一切都是文件, 而這些文件都是存儲在磁盤中, 因此對于磁盤的管理是非常重要的, Linux磁盤管理的好壞, 直接關系到整個系統的性能問題, 本文主要介紹了磁盤結構, 分區類型, 管理分區, 管理文件系統, 掛載設備, 管理虛擬內存這幾大項的內容.    &…

    Linux干貨 2016-08-29
欧美性久久久久