正则表达式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:一个非常好用的图形化正则显示,绝对让你豁然开朗!

正则表达式regex笔记(附练习网站、可视化图解)

4.2 练习网站

RegexOne:英文网站,可翻译。正则基础,附带随堂测试,不会做可实时查看Solution有答案,含电话校验、网址校验、日志校验等案例。

正则表达式regex笔记(附练习网站、可视化图解)

Regexr:提供正则测试,可以编写正则,网站会给正则表达式添加样式,自动在文本中搜索模式串,高亮显示匹配的字符串,并且还会显示每个分组捕获的字符串,很推荐使用。