正则表达式

正则表达式

正则表达式详解表

核心概念

正则表达式是一种用于描述文本模式 的语法。它允许你进行复杂的搜索、替换、提取和验证操作。

类别 元字符/语法 描述 示例 示例匹配结果
普通字符 字母、数字等 匹配字符本身。 abc "abc" (在 "123 abc xyz" 中)

1. 字符匹配
类别 元字符/语法 描述 示例 示例匹配结果
任意字符 . 匹配任意一个字符(除换行符外)。 a.c "abc", "a c", "a@c"
字符集 [abc] 匹配方括号内的任意一个字符。 [aeiou] "cat" 中匹配 "a"
字符范围 [a-z], [0-9] 匹配指定范围内的任意一个字符。 [A-Za-z] 匹配任何一个大写或小写字母
否定字符集 [^abc] 匹配不在方括号内的任意一个字符。 [^0-9] "a1" 中匹配 "a"
预定义字符集 \d 匹配一个数字 。等价于 [0-9] user\d "user1", "user5"
\D 匹配一个非数字 。等价于 [^0-9] \D+ "Price: $100" 中匹配 "Price: $"
\w 匹配一个单词字符(字母、数字、下划线)。 \w+ "Hello, world!" 中匹配 "Hello""world"
\W 匹配一个非单词字符(如标点、空格)。 \W "a b" 中匹配空格
\s 匹配一个空白字符(空格、制表符等)。 a\sb "a b" (a和b之间有空格)
\S 匹配一个非空白字符 \S+ "a b" 中匹配 "a""b"

2. 数量词(限定符)
类别 元字符/语法 描述 示例 示例匹配结果
零次或多次 * 匹配前面的元素零次或多次(尽可能多)。 ab*c "ac", "abc", "abbc"
一次或多次 + 匹配前面的元素一次或多次(尽可能多)。 ab+c "abc", "abbc" (不能匹配 "ac")
零次或一次 ? 匹配前面的元素零次或一次。 colou?r "color", "colour"
指定次数 {n} 匹配前面的元素恰好 n 次。 \d{4} "2023", "1234"
范围次数 {n,} 匹配前面的元素至少 n 次。 \d{2,} "123", "12", "12345"
范围次数 {n,m} 匹配前面的元素至少 n 次,至多 m 次。 \d{2,4} "12", "123", "1234"

3. 位置锚点
类别 元字符/语法 描述 示例 示例匹配结果
开始位置 ^ 匹配字符串的开始 ^Hello "Hello world" 中匹配 "Hello"
结束位置 $ 匹配字符串的结束 world$ "Hello world" 中匹配 "world"
单词边界 \b 匹配单词的开始或结束位置。 \bcat\b "a cat" 中匹配 "cat",但在 "category" 中不匹配
非单词边界 \B 匹配单词边界的位置。 \Bcat\B "category" 中匹配 "cat",但在 "a cat" 中不匹配

4. 分组与选择
类别 元字符/语法 描述 示例 示例匹配结果
捕获分组 (abc) 将多个元素作为一个分组,可被引用或提取。 (\d{3})-(\d{4}) "123-4567" 中,分组1为 "123",分组2为 "4567"
非捕获分组 (?:abc) 只分组,不捕获(不分配组号)。 (?:www\.)?(example\.com) 匹配 "example.com""www.example.com",但只捕获域名部分
选择 ` ` 匹配左边或右边的表达式。 `cat
反向引用 \1, \2... 引用前面第 n 个捕获分组匹配的文本。 (\w+) \1 "hello hello" 中匹配 "hello hello"

5. 转义与模式修饰符
类别 元字符/语法 描述 示例
转义字符 \ 将特殊字符(元字符)转义为普通字符。 \. 匹配字面的点 .,而不是任意字符
模式修饰符 i (不区分大小写) 使匹配对大小写不敏感。 /hello/i 可以匹配 "Hello", "HELLO"
g (全局匹配) 找到所有匹配,而不是在第一个匹配后停止。 "a a a" 中,/a/g 会匹配到三个 "a"
m (多行模式) 使 ^$ 匹配每行的开头和结尾。 在多行文本中,/^\d+/gm 会匹配每一行开头的数字

综合应用示例

场景 正则表达式模式 描述
邮箱地址 [\w\.-]+@[\w\.-]+\.\w+ 匹配常见的邮箱格式。
手机号(简单中国) 1[3-9]\d{9} 匹配以1开头,第二位为3-9的11位数字。
URL https?://[^\s/$.?#].[^\s]* 匹配以 http://https:// 开头的URL。
日期 (YYYY-MM-DD) \d{4}-\d{2}-\d{2} 匹配如 "2023-10-05" 的日期。
强密码验证 ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ 至少一个小写字母、一个大写字母、一个数字,且长度至少8位。
HTML标签 `<(a-z+)(\^\<+)(?:>(.)</\1> \s+/>)`

如何使用这些表格?

  1. 从问题出发:先明确你想匹配什么样的文本(例如:所有数字、以某个词开头的句子、邮箱地址)。
  2. 查找对应工具 :在表格中找到能实现你目标的元字符(例如:匹配数字用 \d,匹配开头用 ^)。
  3. 组合构建:将这些元字符像搭积木一样组合起来,形成最终的正则表达式。
  4. 测试验证:使用在线的正则表达式测试工具(如 regex101.com)来测试你的表达式,确保它能正确工作。

好的,这是将您提供的正则表达式内容整理成的表格:

正则表达式语法参考表

基本元字符

字符 描述 示例 示例说明
\ 转义字符,将特殊字符转为字面意义 \n \\( 匹配换行符、匹配"("
^ 匹配输入字符串的开始位置 ^Hello 匹配以Hello开头的字符串
$ 匹配输入字符串的结束位置 world$ 匹配以world结尾的字符串
. 匹配除"\n"外的任何单个字符 a.c 匹配abc、a c等

数量词(限定符)

字符 描述 示例 示例说明
* 匹配前面子表达式0次或多次 zo* 匹配z、zo、zoo
+ 匹配前面子表达式1次或多次 zo+ 匹配zo、zoo,不匹配z
? 匹配前面子表达式0次或1次 do(es)? 匹配do、does中的do
{n} 匹配确定的n次 o{2} 匹配food中的oo
{n,} 至少匹配n次 o{2,} 匹配foooood中的所有o
{n,m} 最少n次,最多m次 o{1,3} 匹配foooood中的前三个o
?(非贪婪) 紧跟在限制符后表示非贪婪模式 o+? 对于"oooo"只匹配单个o

字符集合

字符 描述 示例 示例说明
[xyz] 字符集合,匹配包含的任意字符 [abc] 匹配plain中的a
[^xyz] 负值字符集合,匹配未包含的字符 [^abc] 匹配plain中的p
[a-z] 字符范围,匹配指定范围内字符 [a-z] 匹配a到z的任意小写字母
[^a-z] 负值字符范围,匹配不在范围内的字符 [^a-z] 匹配不在a到z范围的字符
`x y` 匹配x或y `z

分组与引用

字符 描述 示例 示例说明
(pattern) 匹配pattern并获取匹配 (\d{3}) 捕获三位数字分组
(?:pattern) 匹配pattern但不获取匹配 `industr(?:y ies)`
(?=pattern) 正向预查 `Windows (?=95 98)`
(?!pattern) 负向预查 `Windows (?!95 98)`

预定义字符集

字符 描述 等价于
\d 匹配数字字符 [0-9]
\D 匹配非数字字符 [^0-9]
\s 匹配任何空白字符 [ \f\n\r\t\v]
\S 匹配任何非空白字符 [^ \f\n\r\t\v]
\w 匹配单词字符 [A-Za-z0-9_]
\W 匹配非单词字符 [^A-Za-z0-9_]

边界匹配

字符 描述 示例 示例说明
\b 匹配单词边界 er\b 匹配never中的er,不匹配verb中的er
\B 匹配非单词边界 er\B 匹配verb中的er,不匹配never中的er

特殊字符转义

字符 描述 示例
\f 匹配换页符 等价于\x0c\cL
\n 匹配换行符 等价于\x0a\cJ
\r 匹配回车符 等价于\x0d\cM
\t 匹配制表符 等价于\x09\cI
\v 匹配垂直制表符 等价于\x0b\cK
\cM 匹配Control-M或回车符 x必须为A-Z或a-z之一
\xn 十六进制转义值 \x41匹配"A"
\un Unicode字符 \u00A9匹配版权符号©

向后引用

字符 描述 示例 示例说明
\num 对所获取匹配的引用 (.)\1 匹配两个连续的相同字符
\n 八进制转义值或向后引用
\nm 八进制转义值或向后引用
\nml 八进制转义值 n为0-3,m和l为0-7

扩展预查语法

语法 描述 示例 示例说明
(?=E) 表达式后面紧跟着E才匹配 const(?=\s+char) 匹配const且其后必须有char
(?!E) 表达式后面没有紧跟着E才匹配 const(?!\s+char) 匹配const且其后不能有char
相关推荐
小白快快跑哦7 分钟前
python-字符串全解(六):正则表达式-转义与非转义
python·正则表达式·转义与非转义
晴天的雨.99243 分钟前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
Rain的Java大神之路8 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
十二同学啊8 小时前
向量数据库:从核心原理到 RAG 与 Java 实战
数据库
蓝速科技9 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
大海星辰79810 小时前
一次对账SQL“灵异事件”排查:NOT IN返回空集的坑
mysql
Linux-lucky10 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
知识分享小能手11 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
qq_1998868711 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
一 乐12 小时前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序