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能够支持|, ?, +

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