2 基本語法 正規表示式

2021-05-22 19:51:53 字數 3869 閱讀 1311

我們知道c的變數和shell指令碼變數的定義和使用方法很不相同,表達能力也不相同,c的變數有各種型別,而shell指令碼變數都是字串。同樣道理,各種工具和程式語言所使用的正規表示式規範的語法並不相同,表達能力也各不相同,有的正規表示式規範引入很多擴充套件,能表達更複雜的模式,但各種正規表示式規範的基本概念都是相通的。本節介紹egrep(1)所使用的正規表示式,它大致上符合posix正規表示式規範,詳見regex(7)(看這個man page對你的英文絕對是很好的鍛鍊)。希望讀者仿照上一節的例子,一邊學習語法,一邊用egrep命令做實驗。

表 32.1. 字元類

字元含義

舉例.匹配任意乙個字元

abc.可以匹配abcdabc9

匹配括號中的任意乙個字元

[abc]d可以匹配adbdcd

-括號內表示字元範圍

[0-9a-fa-f]可以匹配一位十六進製制數字

^位於括號內的開頭,匹配除括號中的字元之外的任意乙個字元

[^xy]匹配除xy之外的任一字元,因此[^xy]1可以匹配a1b1但不匹配x1y1

[[:***:]]grep工具預定義的一些命名字元類

[[:alpha:]]匹配乙個字母,[[:digit:]]匹配乙個數字

表 32.2. 數量限定符

字元含義

舉例?緊跟在它前面的單元應匹配零次或一次

[0-9]?/.[0-9]匹配0.02.3.5等,由於.在正規表示式中是乙個特殊字元,所以需要用/轉義一下,取字面值

+緊跟在它前面的單元應匹配一次或多次

[a-za-z0-9_.-]+@[a-za-z0-9_.-]+/.[a-za-z0-9_.-]+匹配email位址

*緊跟在它前面的單元應匹配零次或多次

[0-9][0-9]*匹配至少一位數字,等價於[0-9]+[a-za-z_]+[a-za-z_0-9]*匹配c語言的識別符號

緊跟在它前面的單元應精確匹配n次

[1-9][0-9]匹配從100999的整數

緊跟在它前面的單元應匹配至少n

[1-9][0-9]匹配三位以上(含三位)的整數

緊跟在它前面的單元應匹配最多m

[0-9]相當於[0-9]?

緊跟在它前面的單元應匹配至少n次,最多m

[0-9]/.[0-9]/.[0-9]/.[0-9]匹配ip位址

再次注意grep找的是包含某一模式的行,而不是完全匹配某一模式的行。再舉個例子,如果文字檔案的內容是

aaabc

aadefg

查詢a*這個模式的結果是三行都被找出來了

$ egrep 'a*' testfile 

aabc

aadefg

a*匹配0個或多個a,而第三行包含0個a,所以也包含了這一模式。單獨用a*這樣的正規表示式做查詢沒什麼意義,一般是把a*作為正規表示式的一部分來用。

表 32.3. 位置限定符

字元含義

舉例^匹配行首的位置

^content匹配位於一行開頭的content

$匹配行末的位置

;$匹配位於一行結尾的;號,^$匹配空行

/<匹配單詞開頭的位置

/

/>匹配單詞結尾的位置

p/>匹配leap ...,但不匹配parentsleepy

/b匹配單詞開頭或結尾的位置

/bat/b匹配... at ...,但不匹配catatexitbatch

/b匹配非單詞開頭和結尾的位置

/bat/b匹配battery,但不匹配... attendhat ...

位置限定符可以幫助grep更準確地查詢,例如上一節我們用[0-9]/.[0-9]/.[0-9]/.[0-9]查詢ip位址,找到這兩行

192.168.1.1

1234.234.04.5678

如果用^[0-9]/.[0-9]/.[0-9]/.[0-9]$查詢,就可以把1234.234.04.5678這一行過濾掉了。

表 32.4. 其它特殊字元

字元含義

舉例/轉義字元,普通字元轉義為特殊字元,特殊字元轉義為普通字元

普通字元<寫成/<表示單詞開頭的位置,特殊字元.寫成/.以及/寫成//就當作普通字元來匹配

()

將正規表示式的一部分括起來組成乙個單元,可以對整個單元使用數量限定符

([0-9]/.)[0-9]匹配ip位址

|連線兩個子表示式,表示或的關係

n(o|either)匹配noneither

以上介紹的是grep正規表示式的extended規範,basic規範也有這些語法,只是字元?+{}|()應解釋為普通字元,要表示上述特殊含義則需要加/轉義。如果用grep而不是egrep,並且不加-e引數,則應該遵照basic規範來寫正規表示式。

正規表示式基本語法

表示任意文字 表示任意單個字元 脫字符號 表示一行的開始 表示一行的結束 表示範圍。如 先是行開頭,然後是行結尾 表示空行 i 表示忽略大小寫 表示可選元素 量詞 表示之前緊鄰的元素出現一次或者多次 量詞 表示之前緊鄰的元素出現任意次數,或者不出現 量詞 表示盡可能匹配多的次數,如果無法完成匹配也不...

正規表示式基本語法

參考文章 1 基本語法 特殊符號 和 作用是分別指出乙個字串的開始和結束。the 表示所有以 the 開始的字串 there the cat 等 of despair 表示所以以 of despair 結尾的字串 abc 表示開始和結尾都是 abc 的字串 呵呵,只有 abc 自己了 notice ...

正規表示式基本語法

1.元字元介紹 匹配行或者字串的起始位置 匹配行或字串的結尾 w 匹配字母,數字,下劃線.d 匹配數字 匹配除了換行符以外的任何字元 abc 匹配包含括號內元素的字元 2.反義 w 匹配任意不是字母,數字,下劃線 的字元 s 匹配任意不是空白符的字元 d 匹配任意非數字的字元 b 匹配不是單詞開頭或...