正则表达式入门课
涂伟忠
高级研发工程师
立即订阅
2975 人已学习
课程目录
已更新 9 讲 / 共 16 讲
0/2登录后,你可以任选2讲全文学习。
开篇词 (2讲)
开篇词丨学习正则,我们到底要学什么?
免费
导读 | 余晟:我是怎么学习和使用正则的?
基础篇 (4讲)
01 | 元字符:如何巧妙记忆正则表达式的基本元件?
02丨量词与贪婪:小小的正则,也可能把CPU拖垮!
03 | 分组与引用:如何用正则实现更复杂的查找和替换操作?
04 | 匹配模式:一次性掌握正则中常见的4种匹配模式
应用篇 (3讲)
05 | 断言:如何用断言更好地实现替换重复出现的单词?
06 | 转义:正则中转义需要注意哪些问题?
07 | 正则有哪些常见的流派及其特性?
正则表达式入门课
15
15
1.0x
00:00/00:00
登录|注册

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

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

正则表达式简史

正则表达式的起源,可以追溯到,早期神经系统如何工作的研究。在 20 世纪 40 年代,有两位神经生理学家(Warren McCulloch 和 Walter Pitts),研究出了一种用数学方式来描述神经网络的方法。
1956 年,一位数学家(Stephen Kleene)发表了一篇标题为《神经网络事件表示法和有穷自动机》的论文。这篇论文描述了一种叫做“正则集合(Regular Sets)”的符号。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《正则表达式入门课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(4)

  • 虹炎
    我的答案:
    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
    1
  • 一步
    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
  • 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
  • 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
收起评论
4
返回
顶部