您的位置:首页 > 运维架构 > Shell

BRE与ERE的差异

2016-07-04 11:11 495 查看
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字符
 
[]                           方括号表达式
 
()                          分组
 
* + ? {}                 重复前置的正则表达式
 
无符号                 连续
 
^   $                     锚点
 
|                           交替
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息