正則表達式(regular expression)是一種表示方式,在許多地方均有對此的支持,如命令grep、語(yǔ)言Python、工具vim等。但是這里僅討論POSIX正則表達式,顯然它與其他正則表達式(如傳統的Unix正則表達式)存在稍許的差異。POSIX正則表達式分為:BRE(Basic Regular Expression)和ERE(Extended Regular Expressions)。以下是有關(guān)POSIX正則表達式的元字符(meta)的說(shuō)明:
/
用于關(guān)閉后續字符的特殊意義。有時(shí)用于反向的打開(kāi)后續字符的特殊意義。
.
(點(diǎn)號)匹配任意單個(gè)的字符,但NULL除外。
*
匹配任意數目的字符(可以為0)。以ERE來(lái)說(shuō),此前置字符可是正則表達式,如.*代表了匹配任意字符的長(cháng)度。但對于BRE而言,*置于正則表達式的第一個(gè)字符,不具任何特殊意義。
^
(脫字號)匹配出現在行首或字符串開(kāi)始位置的空字符串。ERE:置于任何位置都具特殊含義;BRE:僅在正則表達式的開(kāi)頭具有此特殊含義。
$
匹配出現在行末的空字符串。ERE:置于任何位置都具特殊含義;BRE:僅在正則表達式的結尾具有此特殊含義。
[...]
方括號表達式,匹配方括號內的任意一字符。連字符(-)指的是連續字符的范圍。^符號置于方括號里第一個(gè)字符則有反向含義:指的是匹配不在列表內(方括號內)的任意字符。作為首字符的一個(gè)連字符或是結束方括號(]),則被視為列表的一部分。所有其他的meta字符也為列表的一部分。
以下只屬于BRE:
/{n-m}
區間表達式,匹配在它之前的單個(gè)字符重現的次數區間。/{n/}指的是重復n次;/{n,/}則為至少出現n次重復,而/{n,m}為重現n至m次。
/( /)
將/(與/)間的模式存儲在特殊的“保留空間”。最多可將9個(gè)獨立的子模式存儲在單個(gè)模式中。如/(ab/).*/1,指的是匹配于ab組合的兩次重現。
/n
重復在/(與/)方括號內第n個(gè)子模式至此點(diǎn)的模式。n為1至9的數字,由左開(kāi)始。
以下只屬于ERE:
{n,m}
與先前提及的BRE的/{n,m/}一樣,只不過(guò)方括號前沒(méi)有反斜杠。
+
匹配前面正則表達式的1個(gè)或多個(gè)實(shí)例
?
匹配前面正則表達式的0個(gè)或1個(gè)實(shí)例
|
匹配于|符號前或后的正則表達式。
( )
匹配于方括號括起來(lái)的正則表達式群。
POSIX方括號表達式:
1、字符集
[:與:]
2、排序符號
[.與.]
3、等價(jià)字符集
[=與=]
具體如下:
[:alnum:]
數字字符
[:alpha:]
字母字符
[:blank:]
空格與定位字符
[:cntrl:]
控制字符
[:digit:]
數字字符
[:graph:]
非空格字符
[:lower:]
小寫(xiě)字母字符
[:print:]
可顯示的字符
[:punct:]
標點(diǎn)符號字符
[:space:]
空白字符
[:upper:]
大些字母字符
[:xdigit:]
十六進(jìn)制數字
同時(shí)在使用時(shí)運算符存在順序問(wèn)題,以下是由高至地的:
BRE:
1、[. .] [= =] [: :]
2、/meta
3、[]
4、/( /) /digit
5、* /{ /}
6、無(wú)符號
7、^ $ .
ERE:
1、[. .] [= =] [: :]
2、/meta
3、[]
4、()
5、* + ? {}
6、無(wú)符號
7、^ $ .
8、|
可參考資料:
1、http://en.wikipedia.org/wiki/Regular_expression
2、http://www.regular-expressions.info/
3、http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html
4、http://www.ibm.com/developerworks/cn/aix/library/au-regexp/
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。