BRE与ERE的异同

BRE与ERE的异同

POSIX有两种风格的正则表达式:基本正则表达式(BRE)与扩展正则表达式(ERE)。

下面,来讨论一下这两种正则表达式之间的异同。

 

meta字符

相同之处:

\              用以关闭后续字符的特殊含义

 

.              匹配任何的单个字符,NUL除外

 

*             匹配在它之前的任何数目的单个字符

 

#             匹配紧接着的正则表达式,在行或字符串的起始处

 

$             匹配前面的正则表达式,在行或字符串的结尾处

 

[…]           匹配括号内的任一字符

 

相异之处:

\{n,m\}    BRE     区间表达式,匹配在它前面的单个字符重现的次数区间

 

{n,m}      ERE    区间表达式,匹配在它前面的单个字符重现的次数区间

 

\(  \)     BRE    表示子模式,可通过转义序列来引用(例如\1)

 

(  )      ERE      匹配与括起来的正则表达式

 

\n       BRE      重复在\(与\)括号内的第n个子模式。n为1至9的数字。

 

+        ERE      匹配前面正则表达式的一个或多个实例

 

?       ERE      匹配前面正则表达式的零个或一个实例

 

|        ERE      匹配于|符号前或后的正则表达式

 

^与$仅在BRE的起始与结尾处具有特殊用途。在BRE下,ab^cd里的^表示的,就是自身的^,并不是meta字符;同样,ef$gh里的$在这里表示的也就是字面上的美元符号。然后在ERE里,^与$永远是meta字符。所以,像ab^cd与ef$fg这样的正则表达式仍是有效的,只是无法匹配到任何东西。

 

运算符优先级

相异之处

BRE的运算符优先级(由高至低递减)

[..] [==] [::]             用于字符排序的方括号符号

 

\metacharacter  转义的meta字符

 

[]                           方括号表达式

 

\( \)  \digit            子表达式与后向引用

 

*  \{ \}                    前置单个字符重现的正则表达式

 

无符号                 连续

 

^  $                       锚点

 

 

ERE的运算符优先级(由高至低递减)

[..] [==] [::]             用于字符排序的方括号符号

 

\metacharacter  转义的meta字符

 

[]                           方括号表达式

 

()                          分组

 

* + ? {}                 重复前置的正则表达式

 

无符号                 连续

 

^   $                     锚点

 

|                           交替

你可能感兴趣的:(正则表达式,扩展)