Linux 工具箱

tonykorn97發表於2006-08-07

正規表示式


什麼是正規表示式?正規表示式只是一個字元模板,用來在搜尋中匹配相同的字元,在大多數程式中,正規表示式是括在正斜線中間的。例如,/love/就是一個以正斜槓為分割符的正規表示式,其中的模板love將用在搜尋所有行中於它匹配的字元。

:1,$s//David/g

這行命令的意思是“從檔案的第一行到檔案的最後一行(1$)替換(s)單詞Tom或者tomDavid”。gglobal)標誌表示這個命令對全文有效。正規表示式元字元<>/分別界定單詞的開始和結束。

正規表示式有兩套字符集,一套是基本元字符集,另一套是擴充套件元字符集。

正則表達是的元字符集

元字元

功能

例子

匹配什麼

^

錨定行的開始

/^love/

匹配所有以love開頭的行

$

錨定行的結束

/love$/

匹配所有以love 結束的行

.

匹配一個字元

/l..e/

匹配這樣的行,這些行包含這樣的字元:第一個字元是l,緊跟著兩個字元,然後是e

*

代表0個或多個先前字元

/*love/

匹配所有這樣的行,有0個或多個空格,空格後跟著love

[]

匹配字元組中的一個字元

/[Ll]ove/

匹配所有包含love或者Love的行

[x-y]

匹配以字元範圍組成的組中的一個字元

/[A-Z]ove/

匹配這樣的行,這些行中包含如下字元,第一個字元是從AZ中間的一個,後面跟著ove

[^]

匹配一個不在範圍內的字元

/[^A-Z]ove/

用來轉義一個元字元

/love./

匹配所有這樣的行,這些行包含如下字元:love後面跟著一個點。通常點是表示任何字元的萬用字元

許多使用RE元字符集的UNIX程式都支援附加元字符集。

<

錨定單詞的開始

/

匹配所有這樣的行,這些行包含以love開頭的單詞(vigrep支援這個功能)

>

錨定單詞的結束

/love>/

匹配所有這樣的行,這些行包含以love結束的單詞(vigrep支援這個功能)

(..)

標記後面用到的匹配字元(傳)

/(love)able1rs/

最多可以使用9個標籤。第一個標籤是模板最左邊的部分。在本例子中,模板love儲存的標籤為1,後面的1指得就是love;本例子搜尋的是這樣的行,這些行包含這樣的字元,在Loveabel後面跟著lovers

x{m}or

M次複製字元x

x{m,}or

至少m次複製字元x

x{m,n}

至少m次,至多n次複製字x

o{5,10}

匹配所有這樣的行,包含的o的數量在510個之間。(vigrep支援這個功能)

幾個例子:

/^[A-Z]..$/

需要在每一行中尋找的字串是這樣的:這個字串是一行的開始且的第一個字元是一個大寫字母,後面緊跟著兩個任意字元,然後是新的一行。

/^[A-Z][a-z ]*[0-5]/

需要在每一行中尋找的字串是這樣的:這個字串是一行的開始,第一個字元是一個大寫字母,緊跟著0個和多個小寫字母,然後是數字3,再後面是一個介於05之間的數字。

/[a-z]*./

0個和多個小寫字母,後面緊跟著一個點號。

/^*[A-Z][a-z][a-z]$/

這個字串是一行的開始,它首先是0個或者多個空格(注意,製表符不算是一個空格),然後是一個大寫字母和兩個小寫字母,緊跟著是新的一行。

/^[A-Za-z]*[^,][A-Za-z]*$/

這個字串是一行的開始,字串的開頭是0個或多個大寫字母或(和)小寫字母,緊跟著一個只要不是逗號的字元,然後是0個和多個大寫字母或者小寫字母,以及新的一行。

//

搜尋的是所有包含單詞fourth的行

//

搜尋的字串是這樣的:以字母f開頭,緊跟著0個或多個任意字元(.*),最終以th結束。

/5{2}2{3}./

首先是25,緊跟著是32,最後是一個點(.)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245419/,如需轉載,請註明出處,否則將追究法律責任。

相關文章