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

06 | 转义:正则中转义需要注意哪些问题?

其他元字符
需要转义的情况
使用函数消除元字符特殊含义
括号的转义
元字符转义
使用原生字符串
正则转义
字符串转义
常见转义字符
功能
思考题
总结
字符组中的转义
正则中元字符的转义
字符串转义和正则转义
转义字符
正则中转义需要注意哪些问题?

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

你好,我是伟忠。今天我来和你聊聊转义。转义对我们来说都不算陌生,编程的时候,使用到字符串时,双引号里面如果再出现双引号,我们就可以通过转义来解决。就像下面这样:
str = "How do you spell the word \"regex\"?"
虽然转义在日常工作中比较常见,但正则中什么时候需要转义,什么时候不用转义,在真正使用的时候可能会遇到这些麻烦。所以我们很有必要来系统了解一下正则中的转义。

转义字符

首先我们说一下什么是转义字符(Escape Character)。它在维基百科中是这么解释的:
在计算机科学与远程通信中,当转义字符放在字符序列中,它将对它后续的几个字符进行替代并解释。通常,判定某字符是否为转义字符由上下文确定。转义字符即标志着转义序列开始的那个字符。
这么说可能有点不好理解,我再来给你通俗地解释一下。转义序列通常有两种功能。第一种功能是编码无法用字母表直接表示的特殊数据。第二种功能是用于表示无法直接键盘录入的字符(如回车符)。
我们这节课说的就是第二种情况,转义字符自身和后面的字符看成一个整体,用来表示某种含义。最常见的例子是,C 语言中用反斜线字符“\”作为转义字符,来表示那些不可打印的 ASCII 控制符。另外,在 URI 协议中,请求串中的一些符号有特殊含义,也需要转义,转义字符用的是百分号“%”。之所以把这个字符称为转义字符,是因为它后面的字符,不是原来的意思了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了正则表达式中的转义问题,从转义字符的概念入手,介绍了在日常工作中常见的转义情况,如在shell中删除文件时需要转义特殊字符。文章详细讨论了在正则表达式中的转义,包括对特殊字符的转义以及在字符组中的转义。此外,还提到了在Python中使用原生字符串和转义函数来简化正则表达式的书写。通过这些内容,读者可以快速了解正则表达式中转义的基本概念和常见问题,以及如何在实际编程中正确处理转义字符。文章内容详实,适合程序员快速了解正则表达式中转义的相关知识。文章内容涵盖了转义字符的概念、在正则表达式中的应用以及在Python中的实际应用,为读者提供了全面的技术知识。

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

全部留言(21)

  • 最新
  • 精选
  • Robot
    google到了一篇回答,分享给大家理解课后思考: Actually regex string specified by string literal is processed by two compilers: programming language compiler and regexp compiler: Original Compiled Regex compiled "\n" NL NL "\\n" '\'+'n' NL "\\\n" '\'+NL NL "\\\\n" '\'+'\'+'n' '\'+'n' https://stackoverflow.com/questions/6967204/how-is-n-and-n-interpreted-by-the-expanded-regular-expression/59192811#59192811

    作者回复: 赞,善于利用搜索查问题的能力很重要

    2020-06-24
    25
  • William
    原字符串中,共包含四个字符,第一个字符是 \,第二个是字母n,第三个是换行符,第四个是 \。 四个正则表达式的构造字符串中,第一个是换行符(正则转义后保持不变,仍然是换行符),第二个是\和n字母(正则转义后是换行符),第三个是\和换行符(正则转义后,单个换行符无意义,只剩下换行符),第四个是\\和换行符(正则转义后为一个斜杠和一个换行符)。 前三个都是找到了换行处,第四个找到了换行符。 测试JavaScript代码: const str = '\\n\n\\' const sources = ['\n', '\\n', '\\\n', '\\\\n'] const regs = [] sources.forEach(s => regs.push(new RegExp(s, 'g'))) regs.forEach(reg => { console.log('[current reg] ', reg) let once_match = reg.exec(str) console.log('[result]', once_match) })

    作者回复: 赞,分析的很好,动手练习测试,这也是一个很好的习惯

    2020-06-24
    3
    11
  • Juntíng
    1、现将输入字符串正则进行字符串转义和正则转义 1. '\n' 字符转义 \n (换行符), 匹配 '\\n\n\\' 到一个换行符 2. '\\n' 字符转义 '\n'(字符\ 和 n), 正则转义 \n (换行符),匹配 '\\n\n\\' 到一个换行符 3. '\\\n' 字符转义 '\' 和 \n ('\\n' 字符\ 和 \n 换行符),正则转义 \n (换行符),匹配 '\\n\n\\' 到一个换行符 4. '\\\\n' 字符转义 '\' 、'\'、'n' ('\\n' 字符 \、\ 和 n), 正则转义 '\n' (字符 \ 和 n) > '\\\n' 这个在转义过程中, 字符串转义后 字符'\' 和 \n (换行符) , 在正则转义时,转义一个换行符,结果还是换行符,没有意义,所以这里就没转义效果了。

    作者回复: 赞,分析思路没有问题,关键就是要明白正则用字符串表示时,字符串转义和正则转义,这两步转义的过程。

    2020-07-08
    6
  • 爱乐之城
    '\\\n' 经过字符串转义变成反斜杠和\n,再经过正则转义变成换行符\n。前面字符串转义可以理解,但是为什么反斜杠和 \n,经过正则转义会变成 \n 呢?

    作者回复: 这个你可以理解成,正则转义的时候,看你转义一个换行,结果还是换行,相当于没转义效果一样了。

    2020-06-28
    4
  • 向死而生
    入门课这样讲的吗?前面才一个/后面就二三四个。也不带解释一下的,我听的意义何在,还得自己找解释

    作者回复: 需要自己主动思考,灌输效果肯定不好,自己根据结果去推测,这样才是正确的学习方法。这一节讲的是转义,其实不管几个,都是转义相关的,不难弄懂原因的

    2021-08-23
    2
    3
  • 虹炎
    ()中内容表示匹配到的。 1,re.findall('\n', '\\n\n\\') 匹配到了 \\n(\n)\\ , '\n'就是换行,后面的\\n 表示反斜杠和n ,所以匹配到 第二个\n 2,re.findall('\\n', '\\n\n\\') 匹配到了 \\n(\n)\\ '\\n'经过字符串转义变成反斜杠和n,再经过正则转移变成换行符\n 3,re.findall('\\\n', '\\n\n\\') 匹配到了 \\n(\n)\\ '\\\n' 经过字符串转义变成反斜杠和\n,再经过正则转移变成换行符\n 4,re.findall('\\\\n', '\\n\n\\') 匹配到了 (\\n)\n\\ 经过字符串转义变成\\n,再经过正则转移变成反斜杠和n. 我的答案不知道对不对,请老师指正!

    作者回复: 对的,主要是搞懂“字符串转义”和“正则转义”两个步骤

    2020-06-24
    3
  • 吕伟
    '\\n\n\\'输出是 \n \ '\n'为python的换行符, '\\n'为正则的换行符, '\\\n'为反斜杠+python换行符, '\\\\n'为字符\n

    作者回复: 赞,这个主要是想让大家明白字符串转义和正则转义,这两步的过程

    2020-07-18
    2
  • 谷岳
    在ECMAScript中,运行结果如下: '\\n\n\\'.match(/\n/g) 结果:["↵"] '\\n\n\\'.match(/\\n/g) 结果:["\n"] '\\n\n\\'.match(/\\\n/g) 结果:null '\\n\n\\'.match(/\\\\n/g) 结果:null 我的理解是这样的: '\\n\n\\'字符串转义结果是"\n↵\",对于正则\n自然匹配的是换行符,而\\n,正则编译成\n,所以第2题匹配结果是["\n"],而对于第3、4题,分别被正则编译成'\↵'和'\\n',无匹配返回null.

    作者回复: 看上去这个转义挺有意思的,感谢分享

    2020-07-03
    2
  • Jock
    感谢涂老师的详细讲解,\ 并没有想象的那么简单。 关于思考题的部分,前排留言已经给出了合理解释。 这里我列自己总结的一些知识点: 1. `\` 作为转义符。包括表示转义序列、转义转义字符本身,使得转义序列失效。 2. `\` 作为续行符。 3. 目前 Python 中对于非法的转义序列,会保留 `\` 在字符串中,C 语言中则是会忽略 `\`。从 Python 3.6 开始,未来,Python 中无法识别的转义序列将报语法错误。因此要表示 `\` 本身,请使用 `\\`。 4. 不管是普通字符串还是原生字符串都不能以奇数个 `\` 结尾,否则会报 `EOL` 错误。 5. 原生字符串中也可以“转义”,但是此时的“转义”有些特别,因为“转义”后 `\` 还会保留在字符串中。 6. 正则表达式字符串的转义有 2 个水平,第 1 次是 Python 解释器层面的转义,第 2 次是 `re` 模块正则引擎的转义。 7. 强烈建议用 `r` 前缀写正则表达式,省去 Python 解释器的转义。 8. `re` 模块正则引擎对于非法的转义序列直接报错 `bad escape`。 知识无穷无尽,点滴总结,聚沙成塔。以上就是分享的全部内容,如果不对之处,恳请斧正~ 展开部分,我放到自己的博客,感兴趣可以去看看:https://blog.csdn.net/qq_27283619/article/details/106948855

    作者回复: 赞赞赞,优秀

    2020-06-24
    2
  • ifelse
    正则中转义有些情况下会比较复杂,从录入的字符串文本,到最终的正则表达式,经过了字符串转义和正则转义两个步骤。--记下来

    作者回复: 看你坚持到了最后,点赞👍

    2022-11-18归属地:浙江
    1
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部