正则表达式

正则表达式

正则表达式详解表

核心概念

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

类别 元字符/语法 描述 示例 示例匹配结果
普通字符 字母、数字等 匹配字符本身。 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 小时前
【C++】模拟算法习题
c++·算法·哈希算法
JIngJaneIL7 小时前
财务管理|基于SprinBoot+vue的个人财务管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·财务管理系统
报错小能手7 小时前
C++笔记(面向对象)多态(编译时 运行时)
c++·笔记
晨非辰7 小时前
《数据结构风云》递归算法:二叉树遍历的精髓实现
c语言·数据结构·c++·人工智能·算法·leetcode·面试
太理摆烂哥7 小时前
map&&set的使用
c++·stl
Dream it possible!7 小时前
LeetCode 面试经典 150_链表_LRU 缓存(66_146_C++_中等)(哈希表 + 双向链表)
c++·leetcode·链表·面试
mailangduoduo7 小时前
命令行传参及调试——vscode平台
c++·人工智能·vscode·代码调试·命令行传参
_OP_CHEN7 小时前
从零开始的QT开发指南:(一)背景、特性与环境搭建
qt·qt下载·图形化界面·gui框架·qt环境配置·qt sdk配置·qt环境变量配置
敲上瘾7 小时前
Linux系统C++开发工具(四)—— jsoncpp 使用指南
linux·服务器·网络·c++·json