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

04 | 匹配模式:一次性掌握正则中常见的4种匹配模式

涂伟忠 2020-06-19
你好,我是涂伟忠。今天我们一起来学习正则中的匹配模式(Match Mode)。
所谓匹配模式,指的是正则中一些改变元字符匹配行为的方式,比如匹配时不区分英文字母大小写。常见的匹配模式有 4 种,分别是不区分大小写模式、点号通配模式、多行模式和注释模式。我们今天主要来讲一下这 4 种模式。
需要注意的是,这里的“模式”对应的是英文中的 mode,而不是 pattern。有些地方会把正则表达式 pattern 也翻译成模式,你在网上看到的技术文章中讲的正则模式,有可能指的是正则表达式本身,这一点你需要注意区别。

不区分大小写模式(Case-Insensitive)

首先,我们来看一下不区分大小写模式。它有什么用呢?学一个知识的时候,我一般喜欢先从它的应用出发,这样有时候更能激发我学习的兴趣,也更容易看到学习成果。
下面我来举个例子说明一下。在进行文本匹配时,我们要关心单词本身的意义。比如要查找单词 cat,我们并不需要关心单词是 CAT、Cat,还是 cat。根据之前我们学到的知识,你可能会把正则写成这样:[Cc][Aa][Tt],这样写虽然可以达到目的,但不够直观,如果单词比较长,写起来容易出错,阅读起来也比较困难。
那么有没有更好的办法来实现这个需求呢?这时候不区分大小写模式就派上用场了。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《正则表达式入门课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(19)

  • 虹炎
    我的答案:
    第一步查找:(?i)<head>((?s).+)<\/head>
    第二步替换:\1
    为什么是\1 而不是\2 , 我觉得是模式修饰符的括号不算分组。老师,你怎么看?
    2020-06-19
    1
  • 虹炎
    老师,正则默认是多行匹配吗?我在您提供的链接上测试是。 ^the|cat$ 我不加(?m)也可以匹配到多行!
    2020-06-19
    1
    1
  • furuhata
    (?si)<head>(.*)<\/head>
    2020-06-19
    1
  • HardToGiveaName
    课后练习题:
    (?is)<head>.*<\/head>

    在将多行视作单行匹配相关内容,采用单行模式
    2020-06-19
  • chengzise
    课后思考: (?is)^<head>\s+(.+)\s+<\/head>
    参考代码: https://regex101.com/r/Xavyfv/3
    不同语言的正则细节上还是有一些区别的, 这个需要多练习.
    2020-06-19
  • 一步
    PCRE: (?i)<head>(?s).+<\/head>
    在 JS 中不支持 ?i 模式的书写形式: /<head>.+<\/head>/igs
    2020-06-19
  • 我行我素
    (?i)<head>(\D*|\d*)+(?i)<\/head>
    2020-06-19
  • 卡尔
    /<head>([\s\S]*)<\/head>/gim
    老师,在js里,为什么 [.\n] 这不是选择所有字符呢
    2020-06-19
  • 我行我素
    (?i)<head>\n.+\n(?i)<\/head>
    2020-06-19
  • 对方正在输入中…
    (?sim).head.(?:.*)<.head.
    200steps
    想请问下老师,是不是在匹配的情况下steps越少越好。
    2020-06-19
    2
  • c1rew
    (?s)<head>\s+(.+)\s+<\/head>

    https://regex101.com/r/NUUVtW/1

    感觉课后题可以多来一题,不够过瘾哈
    2020-06-19
    1
  • Robot
    课后思考:

    reg: <(head>)([\s\S]*)<\/\1
    print \2
    2020-06-19
  • JS: /^<head>\s+(\S+)\s+<\/head>$/gmi
    2020-06-19
  • MG
    思考题:
    (?i)<(title)>((?s).+)<\/\1>
    2020-06-19
  • 盘胧
    Python的re.findall里看来是加了括号,?i 就会把括号里面的内容摘出来。
    2020-06-19
  • Geek.S.
    课后习题: (?is)<head>\s*(.+?)\s*</head>


    https://regex101.com/r/JW8sXy/2
    2020-06-19
  • 盘胧
    老师,((?i)(cat))和((?i)cat)两个规则是不一样的吧……你咋说一样的。应该是这里结果凑巧?
    2020-06-19
  • wenxuan
    (?is)<head>\s*(.*?)\s*<\/head>
    2020-06-19
  • 卡尔
    /<head>([^]?)+?<\/head>/gi
    2020-06-19
收起评论
19
返回
顶部