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

开篇词丨学习正则,我们到底要学什么?

讲述:涂伟忠大小:10.54M时长:11:30
实际工作场景中的正则使用示例
学习正则的记忆方法
掌握正则中的重要概念和功能
正则的工作机制和优化方式
三种主要流派的区别
正则中的断言
Sublime Text 3中的使用方法
反向引用
模式和分组
元字符
解决问题的效率
正则表达式的重要性
学习目标
正则中进阶的内容
在常见的编辑器中使用正则的方法
正则的基本知识
为什么学习正则
学习正则

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

你好,我是涂伟忠。从今天开始,我们就要一起来学习正则表达式了。
我相信,作为一名程序员或者准程序员,你肯定是知道正则表达式的。作为计算机领域最伟大的发明之一,正则表达式简单、强大,它可以极大地提高我们工作中的文本处理效率。现在,各大操作系统、编程语言、文本编辑器都已经支持正则表达式,甚至我还和极客时间的编辑开玩笑说,他们也应该好好学学正则这门手艺。
但是,当我去和朋友深入聊天的时候,才发现很多人是没有系统学习过正则表达式的,他们和我笑着说,这东西不难,我每次用的时候都是去 Google 搜一搜,然后复制过来改一改,效率特别高,我听完之后哭笑不得。
再后来,我和极客时间合作了一个关于正则表达式的每日一课课程,在课程的留言里,很多用户讲了他们的困惑,我总结了下,主要有 4 点:
学过正则,但觉得过于复杂,根本记不住;
在网上找到的正则和自己的需求有一点出入,看不懂,也不知道该怎么改;
不清楚正则的流派和支持情况,搞不懂为何自己写的正则没达到效果;
不清楚正则的工作原理,结果写出的正则或者从网上随便找来的正则出现了性能问题。
为什么会出现这些问题呢?我觉得是核心原因主要是以下几点:
没重视过正则,觉得没必要专门花时间学习,用的时候才发现“书到用时方恨少”;
没系统学习过正则,只简单地使用过部分功能,自然也就不清楚正则流派及工作原理等内容了;
没找到正确的方法去学习和记忆,导致学了之后很快就忘了。
所以,我打算通过一个课程,用尽可能通俗易懂的方式,系统化地给你梳理和讲解正则的知识点,希望可以帮助你解决上面这些问题,让正则这个强大的工具在你手上发挥出真正的威力。
但是呢,真要开始学正则,我想你的心头可能会五味杂陈,内心也是纠结万分。美国一位知名程序员杰米·加文斯基(Jamie Zawinski)说过一句话:
Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.
这句话流传在程序员中间,给人一种感觉,就是正则是很难掌握和利用好的工具。也正因如此,很多程序员并不愿意去学正则表达式,心里可能是这么想的:我在工作中用到正则的时候并不多啊,要用的时候搜一下就好了啊,为什么还要专门花时间和精力学它呢?
但我觉得,真实的情况可能是这样的:不是工作中用不到,而是当你不熟悉一个技能的时候遇到问题时根本不会考虑它。比如我们要删除掉文本中的所有数字,不知道正则的话,你可能会想到从 0 到 9 这样一个个替换,操作 10 次,但如果知道正则,那么只需要替换一次就可以搞定这个问题。

正则是什么,能做什么?

说了这么多,到底什么是正则呢?它能做什么呢?
我们先来说概念。正则,就是正则表达式,英文是 Regular Expression,简称 RE。顾名思义,正则其实就是一种描述文本内容组成规律的表示方式
在编程语言中,正则常常用来简化文本处理的逻辑。在 Linux 命令中,它也可以帮助我们轻松地查找或编辑文件的内容,甚至实现整个文件夹中所有文件的内容替换,比如 grep、egrep、sed、awk、vim 等。另外,在各种文本编辑器中,比如 Atom,Sublime Text 或 VS Code 等,在查找或替换的时候也会使用到它。总之,正则是无处不在的,已经渗透到了日常工作的方方面面。
简单来说,正则是一个非常强大的文本处理工具,它的应用极其广泛。我们可以利用它来校验数据的有效性,比如用户输入的手机号是不是符合规则;也可以从文本中提取想要的内容,比如从网页中抽取数据;还可以用来做文本内容替换,从而得到我们想要的内容。
通过它的功能和分布的广泛你也能看出来,正则是一个非常值得花时间和精力好好学习的基本技能。之前你花几十分钟才能搞定的事情,可能用正则很快就搞定了;之前不能解决的问题,你系统地学习正则后,可能发现也能轻松解决了。

学习正则,我们到底要学什么?

那么问题来了,想要掌握正则,我们到底要学什么?我在课程中又是怎么安排这些内容的呢?

1. 正则的基本知识

正则的很多基本知识其实并不难,只是难记。不过,记住一个东西并不是我们的最终目的,我们的目的是理解并且会用正则这个工具。
比如正则中的各种元字符,在课程中,我会讲有关元字符的记忆技巧,让你不再对元字符感到头疼。再比如各种模式和分组,它们可以在查找和替换时发挥强大的威力。
下面我用 Python 语言示例,从文本中找出连续出现的重复单词。我们可以看到,正则可以很方便地搞定这个需求。
>>> import re
>>> test_str = "the little cat cat in the hat hat."
>>> re.sub(r'(\w+) \1', r'\1', test_str)
'the little cat in the hat.'
但上面的示例在任何情况下都能很好地工作么?我们要不要考虑单词的边界?反向引用又有哪些要注意的点?所有这些问题都会在课程中一一进行讲解。

2.在常见的编辑器中使用正则的方法

我们经常需要从大段文本中抽取需要的内容,学会使用正则之后,不用写代码就可以完成类似的日常工作。举个例子,假如我们在 Sublime Text 3 中使用正则,查找重复出现的单词,并且想把它替换成单个单词。
菜单中的 Find -> Replace,在查找栏中输入 (\w+) \1,在替换栏中输入子组的引用 \1 ,然后点击 Replace All 就可以完成替换工作了。这样,通过少量的正则,我们就完成了文本的处理工作了。是不是很方便呢?

3. 正则中进阶的内容

除此之外,我还会在课程中讲一些更高阶的正则内容,这部分主要有正则中的断言(包括单词边界、行开始和结束、环视),三种主要流派的区别以及对应的软件实现,正则的工作机制和常见的优化方式等。
掌握这些内容可以让我们更好地理解正则, 也可以避过很多坑。比如,为什么在编程语言中能工作的正则,在 Linux 命令 grep 中就不能工作了呢?正则匹配的原理又是什么?如何写出性能更好的正则呢?
综合以上这三点,我希望你能掌握的是正则中一些重要的概念和功能,这是我们学习和使用正则的基础;然后是有关正则的记忆方法,通过合理的方式,事半功倍地达到学习效果,这是我们学习正则的利器;此外,我还会运用大量的示例让你了解正则在实际工作场景中的使用,只有与现实案例结合,我们的学习才不会脱节,这是我们学习正则的原则。
明确原则、打好基础、掌握利器,我相信你一定可以拿下正则这项技能,在工作中随心所用。学完后,你一定会觉得,手写正则原来也没有那么难。
话不多说,我们这就开始吧!
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

学习正则表达式是程序员或准程序员必备的技能之一。正则表达式简单、强大,可以极大地提高文本处理效率。然而,很多人并没有系统学习过正则表达式,导致在实际应用中遇到困惑和问题。作者通过课程系统化地梳理和讲解正则的知识点,希望帮助读者解决学习和应用中的困惑,让正则这个强大的工具在读者手上发挥出真正的威力。 正则表达式是一种描述文本内容组成规律的表示方式,在编程语言、Linux命令和各种文本编辑器中广泛应用。它可以用来校验数据的有效性、提取文本内容、做文本替换等,极大地简化了文本处理的逻辑。通过学习正则表达式,读者可以轻松解决之前需要花费大量时间和精力才能完成的任务,提高工作效率。 在课程中,作者安排了正则的基本知识、在常见编辑器中使用正则的方法以及正则中的进阶内容。通过讲解元字符、模式和分组、断言等内容,读者可以掌握正则的重要概念和功能,以及记忆方法和实际应用技巧。作者还通过大量示例让读者了解正则在实际工作场景中的使用,帮助读者理解正则的工作机制和常见的优化方式。 总之,学习正则表达式是非常值得花时间和精力的基本技能。通过系统学习和实际应用,读者可以轻松掌握正则表达式,提高工作效率,解决实际问题。

2020-06-0858人觉得很赞给文章提建议

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

全部留言(26)

  • 最新
  • 精选
  • Robot
    VScode工具需要把替换内容由\1改为$1

    作者回复: 👍🏻 感谢分享

    2020-06-09
    4
    29
  • 吃草🐴~
    记得以前刚工作的时候,在 W3C 里看过总结过的常用的正则表达式,还打印出来放在电脑旁边,后来个人也确实觉得不常用,就慢慢放弃了。😂还觉得是我的智商配不上正则表达式。这次跟着老师过一遍正则,好好学习一番~ 很喜欢涂老师的这句话:不是工作中用不到,而是当你不熟悉一个技能的时候,遇到问题时根本不会考虑它。感觉说得太有道理🤔🤔

    作者回复: 加油,正则不难,你可以的

    2020-06-16
    12
  • 德育处主任
    这个专栏是基于什么编程语言来使用正则的?

    作者回复: 常见的语言都会讲一讲,前面更多使用的是Python,测试起来比较方便

    2020-06-08
    9
    12
  • William
    老师能否详细对比下正则和通配符

    作者回复: 通配符比正则简单很多,主要有星号(*)和问号(?),星号表示零到多个任意个字符,问号表示任意单个字符。 而正则也要强大和复杂很多,星号和问号含义也不一样了,表示是前面的正则部分出现多少次。

    2020-06-08
    2
    7
  • LubinLew
    您好: 我想问一下,目前的正则规则有RFC吗?讲述的都是PCRE规则吗?有的语法某些语言不支持,是因为其库的实现不完全是吗?之前在Linux中使用过BRE和ERE,这些都是正则的实现,但是PCRE规则应用更广泛是吗?

    作者回复: 在正则流派里面会讲解原因,了解发展历史你就明白原因了。各个语言和库确实实现有差异,但大部分功能都是一样的,思路是一样的。 PCRE是目前主流编程语言使用的流派,应用多一些,BRE和ERE在Linux一些命令中会见到。

    2020-06-24
    5
  • 正则文法,对应有限自动机,其对模式的表示能力和识别能力是有限的。人去理解和应用它时,思维过程是线性的,人脑处理线性的东西其实是有优势的。 但如果是要做正则的解析器,而不是单纯地使用它的话,这时候要实现一个小编译器,将re转换成一颗简单的语法树(非叶子结点都是or结点或and结点),再遍历这个树,并按照几个特定的规则,将其转为nfa,然后在构造效率和识别效率上做权衡,决定要不要转成dfa。这个时候思维就不是线性的了,而是树。 从工具的使用者到工具的实现者,思维相差一个维度。 前人站在更高的维度上实现一个工具,让后人可以用简单的脑力去实现同样的事情,这世上类似的工具有很多,正则只是其中之一。

    作者回复: ������������

    2020-09-14
    3
  • 卡尔
    正则就是匹配文本和位置

    作者回复: 对的

    2020-06-15
    2
  • 我来也
    vi中有两套正则表达式。 不同模式下的元字符还有所差异。 这个不太好记。

    作者回复: 确实不好记,需要多加练习,熟练了自然就记住了。 方法是先把核心的概念都掌握好,至于用什么表示,可以查查参考手册

    2020-07-07
    1
  • 杏林之虎
    word等 office组建中,可否使用正则?如果可以,是否可以推荐学习资料?

    作者回复: Office的查找替换中的通配符,可以实现一些简单的正则的功能,但对于正则还不支持。

    2020-06-30
    2
    1
  • bigben
    在“2.在常见的编辑器中使用正则的方法”中,重复的单词去重后再加个数字该怎么写,比如“cat cat”替换后的结果是“cat2”

    作者回复: 正则部分和原来一样,替换部分不能用\12,因为这样会理解成第12个,在Python里面可以写 \g<1>2这样,在PHP中可以用 \${1}2。像Java里面,如果写\12,他会看12这个分组不存在,然后当成\1后面加个2。有一些语言下你这个问题用正则是无解的,只能想别的办法,比如用命名分组。

    2020-06-20
    1
收起评论
大纲
固定大纲
正则是什么,能做什么?
学习正则,我们到底要学什么?
1. 正则的基本知识
2.在常见的编辑器中使用正则的方法
3. 正则中进阶的内容
显示
设置
留言
26
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部