正則表達式
簡介
REGEXP:由一類特殊字符及文本字符由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)
不表示字符字面意義,而表示控制或通配的功能。
程序支持:grep,sed,awk,vim,less,nginx,varnish等,下面將介紹grep中正則表達式的用法。
正則表達式分基本正則表達式(BRE)和擴展正則表達式(ERE)
正則表達式引擎:采用不同算法,檢查處理正則表達式的軟件模塊PCRE(Perl Compatible Regular Expressions)
元字符分類:字符匹配、匹配次數、位置錨定、分組
BRE元字符
字符匹配:
[:alnum:] 字母和數字,即a-z,A-Z,0-9
[:upper:] 大寫字母,即A-Z
[:space:] 水平和垂直的空白字符,包括空格鍵,[tab],CR等
[:xdigit:] 十六進制數字,包括:0-9,A-F,a-f的數字與字符
匹配次數:
用在要指定次數的字符后面,用于指定前面的字符要出現的次數
* 匹配前面的字符任意次,包括0次(貪婪模式:盡可能長的匹配)
.* 任意長度的任意 。 例如:a*,可以表示a,aa,aaa,aaaaa,aaaa…a.
\? 匹配其前面的字符0或1次 。 例如:ab\?c ,表示ac,abc
\+ 匹配其前面的字符至少一次 。 例如:ab\+c 表示abc,abbc,abbbc等。 \+匹配前面一個字符
最少1次,最多任意次,不包括0次。
\{n\} 匹配前面的字符n次。 例如: ab\{2\}c ,表示在a與c之間有兩個b,
即abbc
{m,n} 匹配前面的字符至少m次,至多n次 。 例:ab{1,3} c,表示在a與c之間有1個到3個b,即 abc,abbc,abbbc
\{,n\} 匹配前面的字符至多n次 例:ab\{,3\}c,表示ac,abc,abbc,abbbc。
最多3次,可以包括0次。
{m,} 匹配前面的字符至少m次 例:ab{2,}c,表示a與c之間最少有2個b,即 abbc,abbbc,abbbbc,abbb…c
示例:在/app下先創建一些文件,運用BRE中匹配次數,進行簡單的操作。如下圖:
位置錨定:
定位出現的位置
^ 行首錨定,用于模式的最左側 例:^content,匹配行首為content的行
$ 行尾錨定,用于模式的最右側 例:txt$,匹配行末為txt結尾的行;^$匹配空白行
^PATTERN$ 用于模式匹配整行 ;^$匹配空行;^[[:space:]]*$匹配空白行
\< 或 \b 詞首錨定,用于單詞模式的左側 例:\<th匹配… this…,但不匹配tenth等
\> 或 \b 詞尾錨定;用于單詞模式的右側 例:p\>匹配leap,但不匹配parent等
\<PATTERN\> 匹配整個單詞 例:\bat\b 匹配… at …, 但不匹配 cat 、batch等
下面我們在/etc/passwd文件中,運用BRE位置錨定來過濾查看一些文件的內容。如下圖:
從上圖中可以看出,^$,^[[:space:]]$只匹配空行;\<bash\>,只匹配帶有整個單詞bash的行,不匹配包含bash單詞的 行,如sbin的行。
分組:
\(\) 將一個或多個字符捆綁在一起,當作一個整體進 行處理,如:\(root\)\+ ;
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …;
\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符。
后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身
示例:\(root\)*\1
下面通過一些例子來簡單介紹分組的基本用法,還是以/etc/passwd文件為例。如下圖:
上圖中:第一個組\(daemon\) ,\1表示調用第一個組匹配到的字符,不是模式本身;雖然都是daemon,但是意思不 一樣。\2表示調用第二個組匹配到的字符。
或者:\|
示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat
例:在/app下創建a、 b、 act、 bct、 cct、 dct 六個文件,運用正則表達式元字符或者,來進行些簡單操作。如下圖:
擴展正則表達式
元字符:
字符匹配:
. 任意單個字符
[] 指定范圍的字符
[^] 不在指定范圍的字符
位置錨定:
^ :行首
$ :行尾
\<, \b :語首
\>, \b :語尾
次數匹配:
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
分組:
() 后向引用:\1, \2, …
或者: a|b: a或b C|cat: C或cat
(C|c)at:Cat或cat
擴展正則表達式與基本正則表達式用法差不多;區別在于反斜杠”\“的不同?;菊齽t表達式元字符中,次數匹配,分組和或者都加反斜杠”\“;
而擴展正則表達式中,次數匹配,分組和或者都不需要加”\“。具體用法參考基本正則表達式,這里就不舉例說明了。
原創文章,作者:shenjialong,如若轉載,請注明出處:http://www.www58058.com/77432