惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
WordPress大学
WordPress大学
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
MyScale Blog
MyScale Blog
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
P
Proofpoint News Feed
D
DataBreaches.Net

博客园 - 岁月长河

emacs. verilog mode guide, example Powershell cmdlet ISP architecture considering AHB 总线笔记 English Dictionary site for ODE and OALD vmic environment makefile the diference between include and import windows 工具命令 cmd python namespace shell cmd args ROE, ROC IP 链接及常用软件 vim 分屏 and command usages vim autocmd irun vcs option 记录 consonant combination
正则表达式篇 之三(BRE和ERE区别)及ELISP
岁月长河 · 2024-04-29 · via 博客园 - 岁月长河

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

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

正则表达式篇 之三(BRE和ERE区别) - 简书 (jianshu.com)

 man grep ELISP:不支持\d

Regexp Backslash (GNU Emacs Manual)

Regexp Backslash (GNU Emacs Lisp Reference Manual)