美文网首页
正则表达式篇 之三(BRE和ERE区别)

正则表达式篇 之三(BRE和ERE区别)

作者: 癞痢头 | 来源:发表于2020-03-19 13:54 被阅读0次

POSIX规范

常见的正则表达式记法,其实都源于Perl,实际上,正则表达式从Perl衍生出一个显赫的流派,叫做PCRE(Perl Compatible Regular Expression),\d\w\s 之类的记法,就是这个流派的特征。但是在PCRE之外,正则表达式还有其它流派,比如下面要介绍的POSIX规范的正则表达式。

POSIX的全称是Portable Operating System Interface for uniX,它由一系列规范构成,定义了UNIX操作系统应当支持的功能,所以“POSIX规范的正则表达式”其实只是“关于正则表达式的POSIX规范”,它定义了BRE(Basic Regular Expression,基本型正则表达式)和ERE(Extended Regular Express,扩展型正则表达式)两大流派。在兼容POSIX的UNIX系统上,grep和egrep之类的工具都遵循POSIX规范,一些数据库系统中的正则表达式也符合POSIX规范。

BRE和ERE二者的区别,简单的说就在于(){}+?|这7个特殊字符的使用方法上:

  1. 在BRE中如果想要这些字符表示特殊的含义,就需要把它们转义。
  2. 反之,在ERE中如果要这些字符不表示特殊的含义,就需要把它们转义。
  3. BRE中的特殊字符:.\[^$*
  4. ERE中的特殊字符多了7个,即:.\[^$*(){}+?|
BRE

在Linux/Unix常用工具中,grep、vi、sed都属于BRE这一派,它的语法看起来比较奇怪,元字符 (){}+?| 必须转义之后才具有特殊含义,如\+\?\|,而且也支持\1\2之类反向引用。

ERE

在Linux/Unix常用工具中,egrep、awk则属于ERE这一派。虽然BRE名为“基本”而ERE名为“扩展”,但ERE并不要求兼容BRE的语法,而是自成一体。

注:PCRE中常用\b来表示“单词的起始或结束位置”,但Linux/Unix的工具中,通常用\<来匹配“单词的起始位置”,用\>来匹配“单词的结束位置”,sed中的\y可以同时匹配这两个位置。

POSIX字符组

在某些文档中,你还会发现类似[:digit:][:lower:]之类的表示法,它们看起来不难理解(digit就是“数字”,lower就是“小写”),但又很奇怪,这就是POSIX字符组。

在POSIX规范中,[a-z][aeiou]之类的记法仍然是合法的,其意义与PCRE中的字符组也没有区别,只是这类记法的准确名称是POSIX方括号表达式(bracket expression),它主要用在Unix/Linux系统中。

POSIX与PCRE方括号表示法的区别

POSIX与PCRE方括号表示法的最主要差别在于:POSIX字符组中,反斜线\不是用来转义的。所以POSIX方括号表示法[\d]只能匹配\d两个字符,而不是[0-9]对应的数字字符。

-- 参考linux 的 grep

man grep 

相关文章

  • 正则表达式

    1 正则表达式 2 元字符介绍 3 BRE 和 ERE 1 BRE(基础正则表达式) 2 ERE (扩展正则表达式...

  • 正则表达式篇 之三(BRE和ERE区别)

    POSIX规范 常见的正则表达式记法,其实都源于Perl,实际上,正则表达式从Perl衍生出一个显赫的流派,叫做P...

  • 正则表达式 高级知识

    1.BRE(Basic Regular Expression) 和 ERE(Extended Regular Ex...

  • day17-正则表达式

    正则表达式符号含义 通配符与正则区别? 正则表达式中注意事项 正则表达式分类: 基本正则(BRE) ※ 扩展正则表...

  • grep通配符使用

    grep 常用选项-E, --extended-regexp, 使用扩展正则表达式 (ERE)-i, --igno...

  • 2019-04-17正则表达式

    刚开始只有 基本正则表达式 ^ $ . [] * 基础正则Basic RE BRE ^ .* . * [] ;[...

  • 正则表达式基础篇

    正则表达式就是用某种模式去匹配一类字符串的一种公式。 PHP中的正则表达式 PHP中有两套正则函数preg和ere...

  • 4.3 正则表达式

    Regular Expression,正则表达式,简写为RegExp。 BRE :Basic RegExp,基本正...

  • grep

    用法: 默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。例如: grep -i 'hello wo...

  • Linux 正则表达式

    正则表达式: BRE: 单字符匹配: . 匹配任意单个字符 [] 匹配括号内字符,用法:[ap] [A-Z] [...

网友评论

      本文标题:正则表达式篇 之三(BRE和ERE区别)

      本文链接:https://www.haomeiwen.com/subject/jcihjhtx.html