正则表达式regex笔记(附练习网站、可视化图解)
正则表达式regex笔记
文章目录
1. 正则表达式含义
1.1 什么是正则表达式
- 定义一种搜索模式的字符序列
- 用来匹配一系列符合某个规则的字符串的表达式
1.2 使用场景
- 数据库字段内容匹配
- 复杂信息过滤,提取有效信息
- 爬虫
2. 正则的结构
2.1 元字符
元字符 | 描述 | 备注 |
---|---|---|
. |
匹配任意单个字符 | 不匹配换行 |
[] |
种类字符,匹配方括号内的任意字符 | |
[^] |
否定种类字符,匹配除了方括号内的任意字符 | |
* |
匹配大于等于0个重复的在*号之前的字符 | |
+ |
匹配大于等于1个重复的在+号之前的字符 | |
? |
标记在?之前的字符为可选 | 出现0次或1次 |
{n,m} |
限定一个或者一组字符出现的次数 | {0,m}、{n,} |
(abc) |
字符集,匹配与abc 完全相等的字符串 |
|
| |
或运算 | |
\ |
转义字符,转义紧跟其后的字符{ } [ ] / \ + * . $ ^|?
|
java中\也需要转义 |
^ |
从开始行开始匹配 | |
$ |
从末端开始匹配 |
2.2 “三叉戟”结构
-
锚点:指定模式位置,指定匹配开头或结尾的字符串。
^
指定开头,$
指定结尾-
^
插入符号:模式固定到行首,检查匹配字符串是否在开头。
^a
代表以a开头的任意行、^(a|A)n
代表以an 或An开头的字符串-
$
美元符号:模式固定到句尾,检查匹配字符是否在最后。
b$
匹配以b结尾的字符串、$b
只是单纯的美元符号后跟着一个b的字符串 -
-
字符集:一组元素[0-9]、[a-z]、[A-Z]类似这样
-
修饰符:用于指定额外的匹配策略。(不细介绍,参考菜鸟教程)
2.3 简写字符集
简写 | 描述 | 简写 | 描述 |
---|---|---|---|
\w |
匹配所有字母数字,等同于[a-zA-Z0-9_]
|
\W |
匹配所有非字母数字,即符号 |
\d |
匹配数字[0-9]
|
\D |
匹配非数字[^\d]
|
\s |
匹配所有空格字符[\t\n\f\r\p{Z}]
|
\S |
匹配所有非空格字符 |
\f |
匹配一个换页符 | \n |
匹配一个换行符 |
\r |
匹配一个回车符 | \t |
匹配一个制表符 |
\v |
匹配一个垂直制表符 | \p |
匹配CR/LF(等同于\r 、\n ) |
2.4 零宽度断言
参考:github正则
3. 常见的正则表达式归纳
3.1 匹配小数或整数
-?\d+(\\.\d+)?
解析:
-?
:负号可选、\d+
:匹配一个以上数字、(\.\d+)?
:小数部分,包含小数点(可选)
3.2 匹配年月日,例如:2020-10-20
^[1-9]\d{0,3}-(1[0-2]|0[1-9])-([0-3]\d)
说明:结果只针对例子,具体视情况而定
3.3 匹配11位手机号
^1\d{10}$
、^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$
解析:以1开头,后面十位数字;后一个比较符合实际号码段,
\\d
中第一个\是java中的转义符
3.4 匹配中国邮政编码
\d[0-79]\d{4}
、\d(9|[0-7])\d{4}
解析:我国邮政编码的规则:前两位是省市自治区,第三位代表邮区,第四位代表县市,最后两位代表投递邮局,总共6为数字。其中第二位不为8(港澳前两位为99,其余为0-7)
3.5 身份证号码
[1-8]\d{5}((18|19|20))?\d{2}[0-1]\d[0-3]\d{4}
解析:可能是15位或者18位。前六位是户口所在地的编码,其中第一位是1-8,此后是出生年月日,出生年份的前两位只能是18、19、20,且是可选的,月份的第一位只能是0、1,日期的第一位只能是0-3;最后一位是校验位是数字或者是X,是可选的
3.6 电子邮件验证
^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$
说明:具体按需求的要求来。
3.7 IP地址验证
(2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2}
解析:IP地址范围0.0.0.0~255.255.255.255
(2(5[0-5]|[0-4]\d))
:匹配200-255
[0-1]?\d{1,2}
:匹配0-199
4. 推荐的练习及测试正则的网站
4.1 学习网站
github-Learn-regex中文版:GitHub上比较好的正则介绍及使用手册
知乎LeetCode回答:以故事方式叙述正则,生动形象,适合初学者阅读(力扣LeetCode的回答)
Regulex:一个非常好用的图形化正则显示,绝对让你豁然开朗!
4.2 练习网站
RegexOne:英文网站,可翻译。正则基础,附带随堂测试,不会做可实时查看Solution有答案,含电话校验、网址校验、日志校验等案例。
Regexr:提供正则测试,可以编写正则,网站会给正则表达式添加样式,自动在文本中搜索模式串,高亮显示匹配的字符串,并且还会显示每个分组捕获的字符串,很推荐使用。