正则表达式都不会,谁要你呀!

正则表达式

如何快速掌握正则表达式的基本使用???

学习正则表达式,非常好的网站:https://regex101.com/

背景

日常开发中正则无处不在,我们经常会使用到。比如按照一定的规则查找我 们需要的代码,就需要使用正则。然而正则比较复杂,不容易记住,掌握不好这个工具。
在工作中,要用到正则时,还得去查资料才能写出来,稍微复杂一点的正则,也很难短时间内搞定。
不难发现,学习和利用正则至关重要!!!

什么是正则呢?

正则是一个非常强大的文本处理工具,主要用来做三件事:

  1. 校验数据的有效性,比如用户输入的手机号,是不是符合规则;
  2. 从文本中提取需要的内容;
  3. 做文本内容替换;

怎么理解正则表达式?

简单来说,它就是描述字符串的规则。最简单的正则就是单个普通的字符。
正则表达式,组成:

  1. 元字符
  2. 贪婪和非贪婪
  3. 环视
  4. 子组

元字符

正则表达式是由元字符组成,元字符是正则表达式中有专用含义的字符。

如何记住元字符?分类记忆法。
分为五类:

  1. 基础
  2. 空白符
  3. 范围
  4. 边界
  5. 量词, 表示次数的量词

1. 基础

四类基础符:

  1. . 任意字符(换行除外)
  2. \d 任意数字 \D任意非数字
  3. \w 任意数字字母下划线 , \W 数字字母下划线以外的任意字符
  4. \s 任意空白符 \S 任意非空白符

2. 空白符

五类空白符:

  1. \r 回车符
  2. \n 换行符
  3. \f 换页符
  4. \t 制表符
  5. \v 垂直制表符
    Windows 系统换行符: \r\n
    linux 和 mac OS 换行符: \n
    比较老的 mac OS换行符: \r

3. 量词

基础和空白符只能匹配单个字符,如果我们需要匹配单个字符重复多次,这就需要使用到表示次数的量词元字符

  1. *含义:0 到多次
  2. +含义:1到多次
  3. ?含义:0到1次, 如colou?r
  4. {m}含义:出现m次
  5. {m, n}含义:m到n次
  6. {,n}含义:其中m不写代表0,至多n次
  7. {m,}含义:其中n不写代表无穷大,至少m次

思考:
\d{11} 是什么意思?

4. 范围

管道符:

  1. | 或,如ab|bc 代表 ab 或 bc
  2. […] 多选一,括号中任意单个元素
  3. [a-z] 匹配a到z之间任意单个元素(按照ASCII表,包含a, z)
  4. [^…] 取反,不能是括号中的任意单个元素

思考:
匹配手机号:
1[3456789]\d{9}
1[3-9]\d{9}
1[^012]\d{9}

5. 边界

除了要找到满足匹配规则的字符外,还对匹配到的文本的位置有要求。
这就需要用到边界元字符:

  1. ^匹配行的开始
    多行模式时,可以匹配任意行开头
  2. $ 匹配行的结束
    多行模式时,可以匹配任意行的结尾
  3. \b 匹配单词的边界
  4. \A 仅匹配整个字符串的开始
    不支持多行模式
  5. \Z 仅匹配整个字符串的结束
    不支持多行模式

贪婪和非贪婪

1. 贪婪
表示次数的量词,默认是贪婪的,默认尽可能多地去匹配

2. 非贪婪
“数量”元字符后加?,找出长度最小且满足要求的

思考
目标字符串:

"the little boy" is a boy,
it look "a little bad".

正则表达式:

".+" 贪婪匹配
".+?" 非贪婪匹配

环视

如果我们对要查找字符的左右俩边有要求时,就需要使用到环视元字符:

  1. X(?<=Y) 匹配前面是Y的X
  2. X(?<!Y) 匹配前面不是Y的X
  3. X(?=Y) 匹配后面是Y的X
  4. X(?!Y) 匹配后面不是Y的X

简单来说,环视就是在我们给定的规则前或规则后,加一些限制

思考:
目标字符串:

<ul>
	<li>item1</li>
	<li>item2</li>
	<li>item3</li>
	<li>item4</li>
</ul>

正则表达式:

(?<=<li>)(.+)(?=</li>)

子组

将正则分成若干个小组

  1. (正则) 将regex保存成一个子组
  2. (?P正则) 命名子组,将regex保存成名称为name的子组
  3. (?:正则)仅分组,不保存这个子组
  4. \分组编号, 重复某个子组

思考:
目标字符串:

the cat cat is in the the hat.

正则表达式

(\w+) \1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值