当前位置: 首页 > news >正文

正则表达式学习

学习正则的网站: https://regexlearn.com/zh-cn/learn/

基础速查: https://regexlearn.com/zh-cn/cheatsheet

1. 限定字符集

符号/模式 描述 示例 解释
. 匹配任意字符(除换行符外) /a.b/ 匹配 "a" 后面跟着的一个任意字符,再跟 "b"
[] 定义字符集 /b[aeo]r/ 匹配结果 barber birbor bur
[^] 定义否定字符集 /b[^aeo]r/ 匹配结果 bar berbir borbur
[a-z] 匹配小写字母字符(a 到 z) /[a-z]/ 匹配任意一个小写字母
[A-Z] 匹配大写字母字符(A 到 Z) /[A-Z]/ 匹配任意一个大写字母
[0-9] 匹配数字字符(0 到 9) /[0-9]/ 匹配任意一个数字
\d 匹配任何数字(0-9) /\d/ 匹配任意一个数字
\D 匹配任何非数字字符 /\D/ 匹配任何非数字字符
\w 匹配任何字母数字或下划线字符 /\w/ 匹配任意一个字母、数字或下划线
\W 匹配任何非字母数字或下划线字符 /\W/ 匹配任何非字母数字或下划线字符
\s 匹配任何空白字符(如空格、制表符、换行符等) /\s/ 匹配任意空白字符
\S 匹配任何非空白字符 /\S/ 匹配任何非空白字符
\b 匹配单词边界(如空格、标点等) /\bword\b/ 匹配完整的 "word"

注意: 没有限定出现次数, 则默认都是一次

2. 限定次数

符号 含义 示例 解释
* 匹配零个或多个前面的元素 /ab*c/ 匹配 "ac", "abc", "abbc" 等
+ 匹配一个或多个前面的元素 /ab+c/ 匹配 "abc", "abbc" 等
? 匹配零个或一个前面的元素 /ab?c/ 匹配 "ac" 或 "abc"
{n} 匹配前一个字符恰好出现 n 次 /a{3}/ 匹配 "aaa"
{n,} 匹配前一个字符至少 n 次 /a{2,}/ 匹配 "aa", "aaa", "aaaa", "aaaa", ...
{n,m} 匹配前一个字符至少 n 次,但不超过 m 次 /a{2,4}/ 匹配 "aa", "aaa", "aaaa"

3. 限定位置

符号 含义 示例 解释
^ 匹配字符串开始 /^abc/ 匹配以 "abc" 开头的字符串
$ 匹配字符串结束 /abc$/ 匹配以 "abc" 结尾的字符串

4. 分组和引用

符号 含义 示例 解释
() 捕获分组 /(abc)+/ 匹配一个或多个 "abc" 字符串
\数字 引用, 可以对捕获分组进行引用 /(ha)-\1,(haa)-\2/ 匹配结果 ha-ha,haa-haa
(?:) 非捕获分组, 即该分组无法被引用 /(?:ha)-ha,(haa)-\1/ 匹配结果 ha-ha,haa-haa

5. 转义和选择

符号 含义 示例 解释
| 选择 /(c|r)at|dog/ 匹配结果 cat rat dog
\ 转义字符{ } [ ] / \ + * . $ ^ | ? /(\*|\.)/ 匹配结果 (*) Asterisk.123**

注意: 在字符集[]内部, 只有这些才需要转义 - ^ ] \, 因为其他的字符在字符集中只会被当做普通字符

6. 标志符 ( 修饰符 / 标记 )

标志符 描述 示例
g 全局匹配:查找所有匹配的结果,而不是只匹配第一个。 /a/g在字符串中查找所有 "a" 字符。
i 不区分大小写:匹配时忽略字母的大小写。 /a/i可以匹配 "a" 或 "A"。
m 多行匹配:影响^$的行为,变为匹配每行的开头和结尾。
/^abc/m可以匹配以 "abc" 开头的多行文本。
s 单行模式:影响.的行为,变为允许.匹配换行符。 /a.b/s匹配 "a" 和 "b" 之间有换行符的字符串。
u Unicode 模式:启用 Unicode 匹配,支持 Unicode 字符。 /\u{20AC}/u匹配 Unicode 字符 "€"。

7. 零宽断言

  • 场景: 如果我们希望正在写的词语出现在另一个词语之前或之后,我们需要使用「零宽断言」

  • 正向先行断言: (?=)

    • 说明: 匹配的某个模式后面符合另一个模式
    • 例子: Date: 4 Aug 3PM 匹配文本中的小时值
    • 解析: 为了只匹配后面有 PM 的数值,我们需要在表达式后面使用正向先行断言 (?=),并在括号内的 = 后面添加 PM。
    • 答案: /\d+(?=PM)/ 匹配结果 Date: 4 Aug 3****PM
    • 巧记: ?后面有没有, =
  • 负向先行断言: (?!)

    • 说明: 匹配的某个模式后面不符合另一个模式
    • 例子: Date: 4 Aug 3PM 匹配文本中除小时值以外的数字。
    • 解析: 我们需要在表达式后面使用负向先行断言 (?!),并在括号内的 ! 后面添加 PM,从而只匹配没有 PM 的数值。
    • 答案: /\d+(?!PM)/ 匹配结果 Date: 4 Aug 3PM
    • 巧记: ?后面有没有, !没有
  • 正向后行断言: (?<=)

    • 说明: 匹配的某个模式前面符合另一个模式
    • 例子: Product Code: 1064 Price: $5 匹配文本中的金额数。
    • 解析: 为了只匹配前面带有 $ 的数字。我们要在表达式前面使用正向后行断言 (?<=),并在括号内的 = 后面添加 $。
    • 答案: /(?<=\$)\d+/ 匹配结果 Product Code: 1064 Price: $5**
    • 巧记: ?<前面有没有, =
  • 负向后行断言: (?<!)

    • 说明: 匹配的某个模式前面不符合另一个模式
    • 例子: Product Code: 1064 Price: $5 匹配文本中除价格外的数字。
    • 解析: 为了只匹配前面没有 $ 的数字,我们要在表达式前用负向后行断言 (?<!),并在括号内的 ! 后面添加 $。
    • 答案: /(?<!\$)\d+/ 匹配结果 Product Code: 1064 Price: $5
    • 巧记: ?<前面有没有, !没有
  • 注意:

    • 断言不会消耗字符 !!!

8. 匹配模式

  • 贪婪匹配

    • 说明: 使用*, +, ?,{n, m}默认就是贪婪模式
    • 特点: 尽可能多地匹配字符,直到整个表达式不再匹配为止。
    • 例子: /.*r/ 匹配结果 ber beer beeer beeeer
  • 懒惰匹配

    • 说明: 在*, +, ?, {n, m}后面加?就会变成懒惰模式, 如 *?, +?, ??, {n, m}?
    • 特点: 懒惰匹配在第一次匹配成功时停止
    • 例子: /.*?r/ 匹配结果 ber beer beeer beeeer
http://www.hskmm.com/?act=detail&tid=23615

相关文章:

  • 深入解析:[特殊字符]函数指针:C语言的动态灵魂,嵌入式的超能力(202589)
  • 《电路基础》第八章学习笔记
  • 《电路基础》第七章学习笔记
  • LLM大模型:deepseek sparse attention是个啥?
  • Day10
  • 软著申请全流程材料模板,2025年最新模板汇总! - 实践
  • 手把手教你使用 Docker 部署 Nginx 教程
  • CF2129 CF1951 VP 记录
  • PWN-BUUCTF-test_your_nc
  • 详细介绍:计算机视觉:OpenCV+Dlib 人脸检测
  • python 老生常谈的找2个excel相同列的行,把其中一个excel行的对应的值放入到另一个excel中
  • 实用指南:淘宝团购上线:本地生活的“两种解法”
  • 【K8S】Kubernetes 调度器深度解析:原理与源码分析
  • 快速幂算法的基础和扩展
  • 堆叠集成
  • 概率与决策 - 模拟程序让你在选择中取胜
  • 题解:qoj6504 Flowers Land 2
  • Prophet
  • 深入解析:逻辑回归(Logistic Regression)
  • 和水导学习的第二篇笔记
  • 微信公众号推文添加附件方法,1分钟学会!支持word,excel,pdf等适合招聘,公告,申请表等
  • bMIND包本地安装
  • 为博客写遗言
  • 2025国庆Day2
  • vue - 实战3 - 后端
  • 新能源汽车整车电控环境详解!
  • P11983 [JOIST 2025] 展览会 3 题解
  • 网络流 费用流 EK算法
  • “AI元人文”构想说明:构建智能时代的人文学科新范式
  • 双向LSTM-Attention模型