正则表达式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_.-]+@[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:提供正则测试,可以编写正则,网站会给正则表达式添加样式,自动在文本中搜索模式串,高亮显示匹配的字符串,并且还会显示每个分组捕获的字符串,很推荐使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值