全面分析Linux正則表達(dá)式(二)
Linux正則表達(dá)式不僅僅是用于各種語言的編程,系統(tǒng)管理員也必須得熟悉。前面我介紹了模式修正符,現(xiàn)在我們繼續(xù)介紹,它是學(xué)好Linux/UNIX必需掌握的一個(gè)知識(shí)點(diǎn),否則你連Linux的啟動(dòng)腳本都讀不懂。
Linux正則表達(dá)式的元字符(Meta-characters)
Linux正則表達(dá)式的威力在于其能夠在模式中包含選擇和循環(huán)。它們通過使用元字符來編碼在模式中,元字符不代表其自身,它們用一些特殊的方式來解析。
有兩組不同的元字符:一種是模式中除了方括號(hào)內(nèi)都能被識(shí)別的,還有一種是在方括號(hào)內(nèi)被識(shí)別的。如果想在模式里包含一個(gè)元字符本身,就需要用到轉(zhuǎn)義符號(hào),正則表達(dá)式常用反斜線“\”作為轉(zhuǎn)義字符使用,為了匹配“\”本身,你需要輸入兩個(gè)“\”,向這樣“\\”。當(dāng)然,這個(gè)符號(hào)本身也是一個(gè)元字符。
方括號(hào)之外的元字符有這些:
\
有數(shù)種用途的通用轉(zhuǎn)義符
^
斷言目標(biāo)的開頭(或在多行模式下行的開頭,即緊隨一換行符之后)
$
斷言目標(biāo)的結(jié)尾(或在多行模式下行的結(jié)尾,即緊隨一換行符之前)
.
匹配除了換行符外的任意一個(gè)字符(默認(rèn)情況下)
[
字符類定義開始
]
字符類定義結(jié)束
|
開始一個(gè)多選一的分支
(
子模式開始
)
子模式結(jié)束
?
擴(kuò)展 ( 的含義,我們已經(jīng)在介紹模式修正符里看到過它的使用。它也可以是 0 或 1 數(shù)量限定符,以及數(shù)量限定符最小值
*
匹配 0 個(gè)或多個(gè)的數(shù)量限定符
+
匹配 1 個(gè)或多個(gè)的數(shù)量限定符
{
最少/最多數(shù)量限定開始
}
最少/最多數(shù)量限定結(jié)束
模式中方括號(hào)內(nèi)的部分稱為“字符類”。字符類中可用的元字符為:
\
通用轉(zhuǎn)義字符
^
排除字符類,但僅當(dāng)其為***個(gè)字符時(shí)有效
-
指出字符范圍
在這里,最值得一提是“\”這個(gè)元字符。之所以重點(diǎn)對(duì)它進(jìn)行講解是因?yàn)檫@一個(gè)元字符有多種不同的用法,在不同情況下代表不同的含義,而且使用頻率非常高,是個(gè)很容易讓人迷惑的地方。
***種用法前面我們已經(jīng)提過,是作為通用轉(zhuǎn)義字符使用,如果其后跟著一個(gè)非字母數(shù)字字符,則取消該字符可能具有的任何特殊含義。此種將反斜線用作轉(zhuǎn)義字符的用法適用于無論是字符類之中還是之外。例如“\\”代表一個(gè)單獨(dú)的反斜線“\”。
第二種用途提供了一種在模式中以可見方式去編碼不可打印字符的方法。模式中完全可以包括不可打印字符,除了代表模式結(jié)束的二進(jìn)制零,例如,可以用“\a”代表alarm,即 BEL 字符(0x07),或用“\cx”代表"control-x",其中 x 是任意字符。當(dāng)然,這種方法表示的不一定非得是不可打印字符,實(shí)際上,可以用“\xhh(十六進(jìn)制代碼為 hh 的字符)”和“\ddd(八進(jìn)制代碼為 ddd 的字符)”來以編碼的形式表達(dá)任何單字節(jié)字符,例如“\040”可以用來表示空格。
反斜線的第三個(gè)用法是指定通用字符類型,這些字符類型序列可以出現(xiàn)在字符類之中和之外。每一個(gè)匹配相應(yīng)類型中的一個(gè)字符。如果當(dāng)前匹配點(diǎn)在目標(biāo)字符串的結(jié)尾,以上所有匹配都失敗,因?yàn)闆]有字符可供匹配。有以下這些常見的通用字符類:
\d 任一十進(jìn)制數(shù)字
\D任一非十進(jìn)制數(shù)的字符
\s任一空白字符
\S任一非空白字符
\w任一“字”的字符
\W任一“非字”的字符
反斜線的第四個(gè)用法是某些簡單的斷言,關(guān)于斷言的討論我們放在后面,這里先不加討論。
反斜線的***一個(gè)用法是逆向引用。關(guān)于逆向引用,我們會(huì)在后面討論逆向引用的部分來做進(jìn)一步的討論。
我們已經(jīng)看到,反斜線的眾多用法,其中一些涉及到了以后才講的內(nèi)容。我們?cè)谀J街杏龅椒葱本€時(shí)一定要注意它具體是哪一種用途以免疑惑。
另外兩個(gè)方括號(hào)也是非常重要的元字符,左方括號(hào)開始了一個(gè)字符類,右方括號(hào)結(jié)束之。單獨(dú)一個(gè)右方括號(hào)不是特殊字符。字符類匹配目標(biāo)中的一個(gè)字符,該字符必須是字符類定義的字符集中的一個(gè);除非字符類中的***個(gè)字符是音調(diào)符(^),此情況下目標(biāo)字符必須不在字符類定義的字符集中。如果在字符類中需要音調(diào)符本身,則其必須不是***個(gè)字符,或用反斜線轉(zhuǎn)義。例如,[^A-Z]表式非大寫字符。
這里先介紹到這里,Linux正則表達(dá)式將繼續(xù)在后面介紹。
【編輯推薦】