正则表达式(Regular Expression)
正则表达式(简称 regex 或 regexp)是一种用于匹配和处理文本的强大工具。它通过定义特定的模式来描述字符串的结构,从而实现对文本的搜索、替换、提取等操作。
1. 基本字符
- 普通字符:字母、数字、空格等,直接匹配自身。
- 示例:
a
匹配字符a
,1
匹配字符1
。
- 示例:
- 特殊字符:具有特殊意义的字符,需要用反斜杠
\
转义。- 示例:
.
匹配任意字符,\.
匹配实际的句点.
。
- 示例:
2. 元字符
元字符是正则表达式中具有特殊功能的字符,常见的元字符包括:
元字符 | 描述 |
---|---|
. | 匹配除换行符(\n )以外的任意单个字符。 |
^ | 匹配字符串的开头。 |
$ | 匹配字符串的结尾。 |
\ | 转义字符,用于匹配特殊字符本身(如 \. 匹配 . )。 |
| | 逻辑“或”,匹配左边或右边的表达式。 |
() | 分组,将多个字符作为一个整体处理,或捕获匹配的内容。 |
[] | 字符集合,匹配括号内的任意一个字符。 |
{} | 量词,指定前面字符或分组的重复次数。 |
3. 字符集合
[abc]
:匹配a
、b
或c
中的任意一个字符。[^abc]
:匹配除a
、b
、c
以外的任意字符。[a-z]
:匹配任意小写字母。[A-Z]
:匹配任意大写字母。[0-9]
:匹配任意数字。\d
:匹配任意数字,等价于[0-9]
。\D
:匹配任意非数字字符。\w
:匹配任意字母、数字或下划线,等价于[a-zA-Z0-9_]
。\W
:匹配任意非字母、数字或下划线的字符。\s
:匹配任意空白字符(空格、制表符、换行符等)。\S
:匹配任意非空白字符。
4. 量词
量词用于指定前面字符或分组的重复次数:
量词 | 描述 |
---|---|
* | 匹配前面的字符 0 次或多次。 |
+ | 匹配前面的字符 1 次或多次。 |
? | 匹配前面的字符 0 次或 1 次。 |
{n} | 匹配前面的字符恰好 n 次。 |
{n,} | 匹配前面的字符至少 n 次。 |
{n,m} | 匹配前面的字符至少 n 次,至多 m 次。 |
5. 分组和捕获
()
:将多个字符作为一个整体处理,并捕获匹配的内容。- 示例:
(abc)+
匹配abc
、abcabc
等。
- 示例:
(?:)
:非捕获分组,只分组不捕获。- 示例:
(?:abc)+
匹配abc
、abcabc
,但不捕获内容。
- 示例:
\n
:引用分组捕获的内容,n
是分组的序号(从 1 开始)。- 示例:
(a)\1
匹配aa
。
- 示例:
6. 边界匹配
^
:匹配字符串的开头。- 示例:
^abc
匹配以abc
开头的字符串。
- 示例:
$
:匹配字符串的结尾。- 示例:
abc$
匹配以abc
结尾的字符串。
- 示例:
\b
:匹配单词边界。- 示例:
\bword\b
匹配独立的单词word
。
- 示例:
\B
:匹配非单词边界。
7. 零宽断言
零宽断言用于指定匹配位置,但不消耗字符:
断言 | 描述 |
---|---|
(?=...) | 正向肯定预查,匹配后面满足条件的位置。 |
(?!...) | 正向否定预查,匹配后面不满足条件的位置。 |
(?<=...) | 反向肯定预查,匹配前面满足条件的位置。 |
(?<!...) | 反向否定预查,匹配前面不满足条件的位置。 |
8. 模式修饰符
模式修饰符用于改变正则表达式的匹配行为:
修饰符 | 描述 |
---|---|
i | 忽略大小写。 |
g | 全局匹配(匹配所有符合条件的字符串,而不仅仅是第一个)。 |
m | 多行模式,使 ^ 和 $ 匹配每行的开头和结尾。 |
s | 单行模式,使 . 匹配包括换行符在内的所有字符。 |
9. 常用正则表达式示例
匹配邮箱地址:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
匹配 URL:
https?://[^\s]+
匹配手机号码:
1[3-9]\d{9}
匹配日期(YYYY-MM-DD):
\d{4}-\d{2}-\d{2}
匹配 IP 地址:
(\d{1,3}\.){3}\d{1,3}
10. 正则表达式的应用场景
-
文本搜索:在文件中查找符合特定模式的字符串。
-
数据验证:验证用户输入是否符合格式要求(如邮箱、电话号码等)。
-
文本替换:将符合模式的字符串替换为指定内容。
-
数据提取:从文本中提取特定格式的数据(如日期、URL 等)。
正则表达式是一种非常强大的工具,掌握它可以极大地提高文本处理的效率!
以上内容仅是个人学习用笔记,由DeepseeAI生成。