正则表达式
-
-
- 正则表达式详解表
-
- 核心概念
- [1. 字符匹配](#1. 字符匹配)
- [2. 数量词(限定符)](#2. 数量词(限定符))
- [3. 位置锚点](#3. 位置锚点)
- [4. 分组与选择](#4. 分组与选择)
- [5. 转义与模式修饰符](#5. 转义与模式修饰符)
- 综合应用示例
- 正则表达式语法参考表
-
正则表达式详解表
核心概念
正则表达式是一种用于描述文本模式 的语法。它允许你进行复杂的搜索、替换、提取和验证操作。
| 类别 |
元字符/语法 |
描述 |
示例 |
示例匹配结果 |
| 普通字符 |
字母、数字等 |
匹配字符本身。 |
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+/>)` |
如何使用这些表格?
- 从问题出发:先明确你想匹配什么样的文本(例如:所有数字、以某个词开头的句子、邮箱地址)。
- 查找对应工具 :在表格中找到能实现你目标的元字符(例如:匹配数字用
\d,匹配开头用 ^)。
- 组合构建:将这些元字符像搭积木一样组合起来,形成最终的正则表达式。
- 测试验证:使用在线的正则表达式测试工具(如 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 |