1. 程式人生 > >正則表示式 BRE 與 ERE的區別

正則表示式 BRE 與 ERE的區別

傳統上,POSIX 定義了兩種正則表示式語法, 即:基本正則表示式(BRE)和擴充套件正則表 達式(ERE)。大多數LINUX程式至少要符合BRE規範。linux中,不同的程式支援的REGXP也不同,如sed只支援BRE的大部分,這主要是收到速度的限制。sed編輯器要儘可能快的處理資料流中的文字。而grep可以支援ERE,不過要使用-E 選項。gawk使用BRE引擎。 其中, BRE 定義的語法符號包括: . - 匹配任意一個字元。 [] - 字符集匹配,匹配方括號中定義的字符集之一。 [^] - 字符集否定匹配,匹配沒有在方括號中定義的字元。 ^ - 匹配開始位置。 $ - 匹配結束位置。 /(/) - 定義子表示式。 /n - 子表示式向前引用,n 為 1-9 之間的數字。 由於此功能已超出正則語義,需 要在字串中回溯,因此需要使用 NFA 演算法進行匹配。 * - 任意次匹配(零次或多次匹配)。 /{m,n/} - 至少 m 次,至多 n 次匹配;/{m/} 表示 m 次精確匹配;/{m,/} 表示至少 m 次匹配。 ERE 修改了 BRE 中的部分語法,並增加了以下語法符號: ? - 最多一次匹配(零次或一次匹配)。 + - 至少一次匹配(一次或更多次匹配)。 | - 或運算,其左右運算元均可以為一個子表示式。 同時,ERE 取消了子表示式 "()" 和 次數匹配 "{m,n}" 語法符號的轉義符引用語法,在 使用這兩種語法符號時,不在需要新增轉義符。 與此同時, ERE 也取消了非正則語義的 子表示式向前引用能力。 BRE 和 ERE 共享同樣的 POSIX 字元類定義。同時,它們還支援字元類比較操作 "[. .]" 和字元來等效體 "[= =]" 操作,但很少被使用。 f / fr / wfr / bwfr 等工具預設使用 ERE 模式,同時支援以下 PERL 風格的字元類: POSIX 類 perl類 描述

----------------------------------------------------------------------------

[:alnum:] 字母和數字

[:alpha:] /a 字母

[:lower:] /l 小寫字母

[:upper:] /u 大寫字母

[:blank:] 空白字元(空格和製表符)

[:space:] /s 所有空格符(比[:blank:]包含的範圍廣)

[:cntrl:] 不可列印的控制字元(退格、刪除、警鈴...)

[:digit:] /d 十進位制數字

[:xdigit:] /x 十六進位制數字

[:graph:] 可列印的非空白字元

[:print:] /p 可列印字元

[:punct:] 標點符號 -

此外,還有以下特殊字元類:

perl類 等效POSIX表示式 描述

----------------------------------------------------------------------------

/o [0-7] 八進位制數字

/O [^0-7] 非八進位制數字

/w [[:alnum:]_] 單詞構成字元

/W [^[:alnum:]_] 非單詞構成字元

/A [^[:alpha:]] 非字母

/L [^[:lower:]] 非小寫字母

/U [^[:upper:]]