目录
1)普通字符普通字符)
2)特殊字符特殊字符)
1)" . ":" . ":)
2)" ^ ":" ^ ":)
3)" $ ":" $ ":)
[3. 字符类 [ ]](#3. 字符类 [ ])
1)[abc][abc])
2)[a-z][a-z])
3)[^][^])
1) " * " " * ")
2)" + "" + ")
3)" ? "" ? ")
4){n}{n})
5){n,}{n,})
6){n,m}{n,m})
1)(exp)(exp))
2)引用引用)
3)(?:exp)(?:exp))
[6. 标志](#6. 标志)
1)" i "" i ")
2)" m "" m ")
3)" s "" s ")
一.正则表达式是什么?
正则表达式 (Regular Expression,简称 Regex 或 Regexp )是一种用来描述字符串模式的工具,它可以用来匹配、查找以及替换文本中的特定文本片段。正则表达式由普通字符(例如字母、数字等)和特殊字符(元字符)组成,这些特殊字符具有特定的含义和用途。
二.正则表达式的使用场景
1.文本搜索和匹配
- 验证输入格式:例如验证邮箱地址、电话号码、密码复杂度等。
- 查找特定模式:从文本中提取符合特定格式的信息,比如查找网页中的链接、提取日期、找出所有匹配的单词等。
- 过滤和清洗文本:用于从文本中过滤出特定内容,或者进行敏感信息的替换。
2.编程中的字符串操作
- 文本处理:在编程中,正则表达式常用于字符串的匹配、替换和分割操作,例如在 Java、Python、JavaScript 等语言中,通过正则表达式对字符串进行复杂的处理操作。
3.日志分析和数据处理
- 日志提取:在大数据处理中,可以使用正则表达式从日志文件中提取特定信息,例如提取访问日志中的IP地址、请求路径等。
- 数据清洗:用于清洗和预处理数据,去除不需要的内容或者格式化数据。
4.文本编辑器和集成开发环境(IDE)
- 搜索和替换:现代文本编辑器和IDE通常支持正则表达式进行高级搜索和替换操作,帮助程序员快速定位和修改代码中的特定模式。
5.网络爬虫和数据抓取
- 网页内容提取:爬虫程序可以使用正则表达式从网页源代码中提取所需的信息,如抓取新闻标题、价格数据等。
6.数据库查询和数据处理
- 数据提取和过滤 :在数据库查询中,可以使用正则表达式进行数据的精确提取和过滤,如在 SQL 查询中使用
REGEXP
条件进行复杂的数据筛选。
7.命令行工具和脚本
- 批量处理 :在 Unix/Linux 环境中,正则表达式常用于命令行工具如
grep
、sed
、awk
等中,用来筛选、转换和处理文本数据
三.正则表达式的基本语法
1.字符的基本匹配
1)普通字符
大多数字符(如
a
、X
、9
)在正则表达式中表示它们自己。
示例如下:
![](https://img-blog.csdnimg.cn/img_convert/1ffce7849eaeb3830b87507331e40eff.png)
当我在表达式输入 'aa' 后,会自动匹配文中的 'aa'
![](https://img-blog.csdnimg.cn/img_convert/d677a723312a3b66618cb596a4634bd7.png)
在表达式中输入数字 '45'
2)特殊字符
有特殊意义的字符,如
.
、$
、^
、*
、+
、?
、{}
、[]
、|
、()
、\,
它们在正则表达式中有独特的含义,需要用反斜杠\
进行转义,例如\.和
\+
示例如下:
![](https://img-blog.csdnimg.cn/img_convert/fbe861feb31483182b1a559b3ae887a6.png)
在表达式输入 '255\.' 后,会自动匹配文中的 '255.'
2.正则表达式的特殊字符
1)"
. ":
匹配除换行符以外的任意单个字符
示例如下:
![](https://img-blog.csdnimg.cn/img_convert/3fd8a1de116cfa1b6cefe13f7fef2a08.png)
在表达式输入 '.5' 后,会自动匹配文中的5和它前面的任意一个字符 ,包括空白字符
2)" ^ "
:
匹配输入字符串的开始位置
示例如下:
![](https://img-blog.csdnimg.cn/img_convert/c865efce10ee147acb171f811dae8dbf.png)
![](https://img-blog.csdnimg.cn/img_convert/bf29a3399e33d035fd3f780d60552d01.png)
加上 ' ^ ' 后,就只有每段开头的 'aa' 被匹配到了
3)" $ "
:
匹配输入字符串的结束位置
示例如下:
![](https://img-blog.csdnimg.cn/img_convert/59f905d9b96835424131d385a231db48.png)
![](https://img-blog.csdnimg.cn/img_convert/f5511fc5e21935cd516a106e212e0f60.png)
加上 ' $ ' 后,就只有每段结尾的 'ee' 被匹配到了
3. 字符类 [ ]
1)[abc]
匹配任何一个列在括号中的字符(如
a
、b
、或c
)
示例如下:
![](https://img-blog.csdnimg.cn/img_convert/df8d2ba22c69957403d0c5e8b69306e1.png)
匹配到了 'at' 'bt' 'ct' , [ ]里没有d ,所以没有匹配到 'dt'
2)[a-z]
匹配任何一个从
a
到z
的小写字母
示例如下:
![](https://img-blog.csdnimg.cn/img_convert/570a3a2b3b1a769f2fbf6db88f29d927.png)
[a-z]->a到z的任意一个字符都可以匹配,
(可以写成任意两个字符之间的范围:[a-f],[c-v]等等)
![](https://img-blog.csdnimg.cn/img_convert/51cb49c1fee53731c2d893aa17d77a7d.png)
[0-9]->0到9的任意一个字符都可以匹配,
![](https://img-blog.csdnimg.cn/img_convert/ca8a50e395dd68ef0be4ddf66e84dda8.png)
(可以将两个及以上的范围写到一起)[a-z0-9] : 0到9或a-z的任意一个字符都可以匹配
3) [^]
匹配任何不在括号中的字符 ( 当' ^ '在[ ]当中时 )
示例如下:
![](https://img-blog.csdnimg.cn/direct/70c41a30f6ed41f7bc3652bf0682756c.png)
除了小写英文字母的所有字符都可以匹配
![](https://img-blog.csdnimg.cn/direct/c7e9641c27ce4057901c0bf1dc0ca7f1.png)
任意一个非小写字母+bomu都可以匹配
4.量词
1) " *
"
匹配前面的子表达式零次或多次
示例如下:
![](https://img-blog.csdnimg.cn/direct/17ed2d452ca24e1aa37d3f1faf1ed190.png)
w后面接零个或多个o都可以匹配
![](https://img-blog.csdnimg.cn/direct/a44f410acc184c2784ecbbc614b690b5.png)
' . '表示匹配任意一个字符,' .* '就表示匹配任意长度的字符串
2)" +
"
匹配前面的子表达式一次或多次
示例如下:
![](https://img-blog.csdnimg.cn/direct/32dfaec2a8c44ad89882a4240aeeb39d.png)
字符o至少要出现一次的情况
3)" ? "
匹配前面的子表达式零次或一次
示例如下:
![](https://img-blog.csdnimg.cn/direct/1e910f522f7f44e58d1b65b10661802e.png)
字符w出现一次或零次的情况
4) {n}
精确匹配 n 次
示例如下:
![](https://img-blog.csdnimg.cn/direct/bad39afadf5543dda793983d0a5e3162.png)
字符o出现了一次的情况
5) {n,}
匹配 n 次或更多次
示例如下:
![](https://img-blog.csdnimg.cn/direct/37acb6944cb943ca882edbe55fe574b0.png)
字符o出现一次及以上的情况
6) {n,m}
匹配 n 到 m 次
示例如下:
![](https://img-blog.csdnimg.cn/direct/7392bc68113f4670b00bae23c9b26b0b.png)
字符o出现2到3次的情况
5.分组和引用
1)(exp)
匹配
exp
并捕获文本到自动命名的组里,它可以通过\1
、\2
等引用
示例如下:
![](https://img-blog.csdnimg.cn/direct/1c038d88a2a04d37bc52225b4ab25ede.png)
@后面(abc)可出现零次或多次的情况
![](https://img-blog.csdnimg.cn/direct/bd2a3d4a645642ea948ece66f419d543.png)
a friut of 后面匹配apple或banana的情况
2)引用
对于每次数据进行匹配时(一行的数据或其他情况),对于所有匹配成功的组都会按顺序编号存储起来(/1 ,/2 ,/3....等等,不同版本的编号的命名方式可能不一样)方便我们再次使用它们
例如:
![](https://img-blog.csdnimg.cn/direct/365923f924474909a8bc873d781f615c.png)
此时匹配成功的有两组,它们的编号分别是/1和/2
当我们使用/1时,系统就会对应上 a friut of apple,使用/2时,系统就会对应上 a friut of banana
3)(?:exp)
匹配
exp
但是不捕获匹配的文本,不给此括号组分配组号
正常匹配符号分组的字符串,但是系统将不会编号
6. 标志
当我们使用正则表达式的时候,可以设置一些标志来改变处理方式
1)" i "
使匹配不区分大小写
2)" m "
多行模式,
^
和$
可以匹配行首行尾
3)" s "
使
.
匹配包括换行符在内的所有字符
到这里关于正则表达式的讲解就结束了~