• 正则表达式快速入门笔记


    0. 基础概念

    正则表达式是以字符为单位匹配文本(字符串)的模式(pattern)表达式。正则表达式是区分字母大小写1,它由普通字符(plain text)和元字符2(metacharacter)构成。

    其中,一部分元字符可代表某些特定的普通字符的集合(它们统称为:特殊字符元字符),另一部分是正则表达式语法的组成部分(语法关键字)。

    1. 匹配单个字符

    可通过一个普通字符、一个字符集或一个(特殊字符)元字符来匹配待查字符串中的某个字符。普通字符仅能匹配与其自身完全相同的字符;字符集3可以匹配与集合中任意一个(普通)字符相同的字符;元字符可以匹配与它所代表的字符集中的任意一个(普通)字符相同的字符。

    字符集用一组成对使用的元字符左方括号( [ [ [)和右方括号( ] ] ])来定义,其含义是必须匹配该集合里的字符之一(各个字符之间是 OR 逻辑关系,而不是 AND 关系)。一般来讲,可通过列举出所有可能的普通字符来定义一个字符集,代码如下所示:

    # 列举法定义字符集
    [Rr]
    [ns]
    
    • 1
    • 2
    • 3

    当列举出的普通字符是某个(ASCII码表)字符区间内的连续字符序列时,也可使用元字符 - 以字符区间的方式定义一个字符集,代码如下所示:

    # 字符区间法定义字符集
    [0-9]	# 等效于 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [A-Z]	# 等效于 [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]
    [a-z]	# 等效于 [a, b, c, d, e, f, g, h ,i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]
    
    • 1
    • 2
    • 3
    • 4

    字符集内的开头位置(即在左方括号之后,首个普通字符之前)添加元字符 ^,可表示排除字符集合内指定的字符之外的所有字符组成的集合,相当于给定字符集的非逻辑关系。

    常用的代表特定字符集的元字符,如下表所示:

    元字符说明
    .4可以匹配任意字符(包括其本身)
    [\b]退格符(Backspace 键)
    \f换页符
    \n换行符
    \r回车符
    \t制表符(Tab 键)
    \v垂直制表符
    \s空白字符集,等价于 [\f\n\r\t\v]
    \S非空白字符集,等价于 [^\f\n\r\t\v]
    \d数字字符集,等价于 [0-9]
    \D非数字字符集,等价于 [^0-9]
    \w英文字母及数字字符集,等价于 [a-zA-Z0-9_]
    \W非英文字母及数字字符集,等价于 [^a-zA-Z0-9_]
    \x十六进制数字符集
    \05八进制数字符集

    2. 匹配多个连续字符

    按字符出现顺序,依次排列匹配该(单个)字符的普通字符、字符集或元字符,即可匹配多个连续字符。若有连续重复出现的字符,可通过指定匹配该字符的普通字符、字符集或元字符的重复匹配次数(或次数区间)来实现匹配,不用多次重复书写。

    普通字符、字符集或元字符的重复匹配次数由量词元字符指定,量词元字符又可分为“贪婪型”(greedy)量词元字符和“懒惰型”(lazy)量词元字符两种。贪婪型(greedy)元字符会尽可能地从一段文本的开头一直匹配到末尾,而不是碰到第一个匹配时就停止。而懒惰型(lazy)元字符正相反,它匹配尽可能少的字符,当遇到第一个匹配时即停止,可有效避免过度匹配。

    常用量词元字符如下表所示

    型元字符说明
    *匹配前一个字符(或子表达式)的零次或任意多次重复
    +匹配前一个字符(或子表达式)的一次或任意多次重复
    匹配前一个字符(或子表达式)的零次或一次重复
    {n}匹配前一个字符(或子表达式)的 n 次重复
    {m, n}匹配前一个字符(或子表达式)的至少 m 次且至多 n 次重复
    {n, }匹配前一个字符(或子表达式)的至少 n 次重复
    *?* 的懒惰型版本
    +?+ 的懒惰型版本
    {n, }?{n, } 的懒惰型版本

    3. 匹配特定位置的单/多个字符

    位置元字符可指定匹配字符在待查字符串中出现的位置,如字符串中某一单词的开头/结尾,或待查字符串的开头或结尾等位置。常见的位置元字符如下表所示:

    元字符说明
    \b匹配单词的边界(开头和结尾)6,如:匹配以 cat 开头的单词:\bcat;匹配以 cat 结尾的单词:cat\b;匹配一个完整的单词7\bcat\b
    \B\b 的反义,即匹配单词的内部(非开头和结尾的字符)
    ^匹配字符串的开头,需写在正则表达式语句的开头第一个字符位置
    $匹配字符串的结尾,需写在正则表达式语句的结尾最后一个字符位置

    4. 其他常用功能

    其他常用的元字符还有:

    • 元字符 \ :转义字符
    • 元字符 | :或逻辑
    • 元字符对左右圆括号 () :子表达式

    1. 所以 Ben 不匹配 ben ↩︎

    2. 元字符是一种系统关键字,在正则表达式中起某种特殊 ↩︎

    3. 字符集是由多个普通字符组成的一个集合,待查字符串中的某个字符与集合中的任意一个普通字符相同,都算匹配成功。如:数字字符集 [0-9],它等效于 [0, 1, 2, 3, 4, 5, 6, 7, 8,9] ↩︎

    4. 是英文句号 ↩︎

    5. 是数字 0,不是英文字母 o ↩︎

    6. 元字符 \b 匹配的是字符之前的一个位置,即:一边是单词(能够被\w匹配的字符)且另一边是其他内容(能够被\W配的字符)的两个字符之间的位置 ↩︎

    7. 要在待匹配文本的模式语句的前后两端,都加上元字符\b ↩︎

  • 相关阅读:
    码蹄集 - MT3114 · 有趣的平衡 - 用样例通俗地讲解
    数据分析技能点-机器学习优化思想
    【Educoder数据挖掘实训】异常值检测-箱线图
    剖析浏览器渲染与服务器渲染及其根本区别
    【localStorage的理解与使用】
    Linux用户分类和权限详解
    vue的生命周期
    AI智能网关在工业物联网领域有哪些应用优势
    利用KerasCV YOLOv8轻松实现目标精确检测
    掌握这五点,客户重复下单率高达90%
  • 原文地址:https://blog.csdn.net/xunyishuai5020/article/details/126021792