正则表达式入门课
涂伟忠
高级研发工程师
24700 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 18 讲
正则表达式入门课
15
15
1.0x
00:00/00:00
登录|注册

07 | 正则有哪些常见的流派及其特性?

课后思考
总结
在Linux中使用正则
PCRE流派
POSIX流派
正则表达式简史
正则表达式流派

该思维导图由 AI 生成,仅供参考

你好,我是涂伟忠。今天我来给你讲讲正则常见的流派及其特性。
你可能要问了,讲正则流派有啥用呢?不如多来点实战啊。其实,我们去了解正则的演变过程是很有必要的。因为你一旦了解了正则的演变过程之后,就能够更加正确地去使用正则,尤其是在 Linux 系统中。
那我们就先来看一个有关 Linux 系统的例子,你先来感受一下。
如果你在 Linux 系统的一些命令行中使用正则,比如使用 grep 过滤内容的时候,你可能会发现结果非常诡异,就像下图这样,在 grep 命令中,使用正则\d+ 取不到数据,甚至在 egrep 中输出了英文字母 d 那一行。
这个执行结果的原因就和正则的演变有着密不可分的关系。那到底有什么样的关系呢?我们接着往下看,我从正则的发展历史给你讲起。

正则表达式简史

正则表达式的起源,可以追溯到,早期神经系统如何工作的研究。在 20 世纪 40 年代,有两位神经生理学家(Warren McCulloch 和 Walter Pitts),研究出了一种用数学方式来描述神经网络的方法。
1956 年,一位数学家(Stephen Kleene)发表了一篇标题为《神经网络事件表示法和有穷自动机》的论文。这篇论文描述了一种叫做“正则集合(Regular Sets)”的符号。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

正则表达式在计算机领域中扮演着重要的角色,本文介绍了正则表达式的发展历史和两大流派:POSIX流派和PCRE流派。POSIX流派包括BRE标准和ERE标准,而PCRE流派源自Perl语言,具有简记方式,被大部分编程语言所采用。文章还介绍了在Linux系统中使用正则表达式的方法和工具,以及不同流派的特点和使用方式。通过本文的学习,读者可以了解各流派的差异,以及命令实现的是哪个正则标准,从而更好地应用正则表达式。文章还提供了课后思考的练习,帮助读者加深对不同标准的理解。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《正则表达式入门课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 设置昵称
    好像 Mac 中自带的 grep 早就不支持 -P 这个模式了,需要 brew install grep ,用这个版本覆盖系统的版本才能用 -P 这个参数

    作者回复: 感谢分享

    2020-07-01
    17
  • 虹炎
    我的答案: grep 'ftp\|http\|https\|' b.txt #POSIX-BRE标准 grep -E 'ftp|http|https' b.txt #POSIX-ERE标准 egrep 'ftp|http|https' b.txt #POSIX-ERE标准 grep -P 'ftp|http|https' b.txt #PCRE

    作者回复: 赞,没问题。 https? 如果这个来表示 http 和 https 呢?

    2020-06-26
    3
    8
  • Robot
    ## BRE grep '\(f\|ht\)tps\?.*' a.txt ## ERE grep -E '(f|ht)tps?.*' a.txt ## PCRE grep -P '(f|ht)tps?.*' a.txt

    作者回复: 对的

    2020-06-26
    4
  • PCRE: grep -P 'https?|ftp' ERE: grep -E 'https?|ftp' BRE: grep 'https\?\|ftp' 这里 ERE 和 PCRE 是一样的写法了

    作者回复: 对的,ERE 和 PCRE 主要区别在于字符组,PCRE功能更丰富些,比如支持了 环视。 这里有一个详细的 Regex cheatsheet 可以参考: https://remram44.github.io/regex-cheatsheet/regex.html

    2020-06-27
    1
  • wenxuan
    GNU sed不支持PCRE吧,没有-P选项

    作者回复: 是的,不支持,如果想用可以考虑使用 perl 命令代替 https://askubuntu.com/questions/1050693/sed-with-pcre-like-grep-p

    2020-07-01
  • felix
    还是得再请教老师! 输入是 var para = { a: 'test;test', b: { c: a, } }; function funtest { }; 输出是 var para = { a: 'test;test', b: { c: a, } }; 【下面是上个问题2020-06-24】 谢谢老师对上个问题的回答,但是用单个字符}或;作为结尾肯定覆盖不了全部情况,变量里面也可能有括号。 所以我的问题是怎么拿到第一个以};一起结尾的字符串?谢谢! var para = { a: 'test;test', b: { c: a, } }; function funtest { }; 【下面是上个问题2020-06-22】 没什么基础,看完了这几期课程,还是有点晕。有个例子想老师帮我看看: 我想拿到script里的一个变量,script如下所示: <script> var para = { a: 'test;test', }; function funtest { }; </script> 目标是拿到para这个变量,想法是拿到第一个};前的内容,但是目前只会拿到第一个;前的内容,但是;有时会出现在引号里面,想问下老师怎么修改如下python正则 var para = ([^;]+);

    作者回复: 可以参考一下这个 https://regex101.com/r/mJCvRx/1 正则:var[\w\W]+?}; 你可以再根据实际情况修改下

    2020-06-26
  • 码农Kevin亮
    正则难就难在不同流派,之前对此相当困惑
    2020-10-02
    3
  • ifelse
    学习打卡
    2022-11-18归属地:浙江
  • RecordLiu
    PCRE标准:grep -P '(ftp|https?)://.+' BRE标准:grep '\(ftp\|https\{0,1\}\)://.\{1,\}' ERE标准:grep -E '(ftp|https?)://.+' BRE标准中需要转义圆括号、管道符号,量词?和+需要用区间\{0,1\}和\{1,\}表示,ERE标准中,圆括号、管道符号不需要转义,也支持量词?和+号。
    2021-02-28
  • 追风筝的人
    正则主要有两大流派,分别是 POSIX 流派和 PCRE 流派。其中 POSIX 流派有两个标准,分别是 BRE 标准和 ERE 标准,一般情况下,我们面对的都是 GNU BRE 和 GNU ERE。它们的主要区别在于,前者要转义。另外, POSIX 流派一个特点就是有自己的字符组 POSIX 字符组,这不同于常见的 \d 等字符组。
    2020-10-24
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部