簡介
POSIX標準定義了兩種regex,分別是BRE(Basic Regular Expression)和ERE(Extended Regular Expression)。linux中的命令(程序)如grep,less,以及一些數據庫都實現了POSIX正則表達式。
POSIX BRE
大多數Regex flavor包括POSIX ERE都使用\
來對metacharacter進行轉義,但是BRE的一些metacharacter需要在之前加上\
才能表達其語義。
BRE支持字符類和括號表達式。但不支持\d
, \w
等縮寫。標準BRE支持12中命名類,以下爲部分:字母數字[:alnum:]
,字母[:alpha:]
,數字[:digit:]
,空白(space和tab)[:blank:]
,空白字符[:space:]
,控制字符[:cntrl:]
。
BRE還支持^
, $
, .
, *
。其中.
匹配除換行符以外的任一字符。*
表示任意匹配次數。這幾個符號需要轉義才能使用字面值。\
本身需要使用\\
表達字面含義。
BRE的其他metacharacter需要加\
表示特殊語義。a{1,2}
匹配字符串a{1,2}
,而a\{1,2\}
匹配a
, aa
。BRE不支持量詞+
、?
.但支持以下表達式:
{n}
:恰出現n次
{n,}
出現n次或更多
{,m}
:最多m次。這是GNU拓展。
{n,m}
:最少n次,最多m次
BRE使用\(
和\)
來將字符組合成組。BRE不支持捕獲組。
此外BRE不支持“或”(alternation)的特性,即不支持|
。但是,GNU實現的BRE和ERE沒有功能上的差別。因此在grep,less等命令中可以使用\|
表示或,使用\+
等量詞。
POSIX ERE
POSIX ERE使用\
來對metacharacter進行轉義。metacharacter可直接使用,代表其特殊意義。如a{1,2}
能夠匹配a
, aa
。
ERE能夠支持|
, ?
, +
。