07 | 正则有哪些常见的流派及其特性?
涂伟忠
该思维导图由 AI 生成,仅供参考
你好,我是涂伟忠。今天我来给你讲讲正则常见的流派及其特性。
你可能要问了,讲正则流派有啥用呢?不如多来点实战啊。其实,我们去了解正则的演变过程是很有必要的。因为你一旦了解了正则的演变过程之后,就能够更加正确地去使用正则,尤其是在 Linux 系统中。
那我们就先来看一个有关 Linux 系统的例子,你先来感受一下。
如果你在 Linux 系统的一些命令行中使用正则,比如使用 grep 过滤内容的时候,你可能会发现结果非常诡异,就像下图这样,在 grep 命令中,使用正则\d+ 取不到数据,甚至在 egrep 中输出了英文字母 d 那一行。
这个执行结果的原因就和正则的演变有着密不可分的关系。那到底有什么样的关系呢?我们接着往下看,我从正则的发展历史给你讲起。
正则表达式简史
正则表达式的起源,可以追溯到,早期神经系统如何工作的研究。在 20 世纪 40 年代,有两位神经生理学家(Warren McCulloch 和 Walter Pitts),研究出了一种用数学方式来描述神经网络的方法。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
正则表达式在计算机领域中扮演着重要的角色,本文介绍了正则表达式的发展历史和两大流派:POSIX流派和PCRE流派。POSIX流派包括BRE标准和ERE标准,而PCRE流派源自Perl语言,具有简记方式,被大部分编程语言所采用。文章还介绍了在Linux系统中使用正则表达式的方法和工具,以及不同流派的特点和使用方式。通过本文的学习,读者可以了解各流派的差异,以及命令实现的是哪个正则标准,从而更好地应用正则表达式。文章还提供了课后思考的练习,帮助读者加深对不同标准的理解。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《正则表达式入门课》,新⼈⾸单¥59
《正则表达式入门课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(11)
- 最新
- 精选
- 设置昵称好像 Mac 中自带的 grep 早就不支持 -P 这个模式了,需要 brew install grep ,用这个版本覆盖系统的版本才能用 -P 这个参数
作者回复: 感谢分享
2020-07-0117 - 虹炎我的答案: 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-2638 - 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-264 - 奕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-271 - wenxuanGNU 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-023
- ifelse学习打卡2022-11-18归属地:浙江
- RecordLiuPCRE标准: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
收起评论