POSIX BRE和ERE

簡介

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, aaBRE不支持量詞+?.但支持以下表達式:
{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能夠支持|, ?, +

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章