正则表达式详解速查

写在前面:

最近在刷LeetCode,碰到一个题因为用到了正则表达式,正好作为小白这一块没怎么接触过,所以索性借这个题,把这个知识点彻底搞一下,下面的内容来自我听B站UP奇乐编程学院的视频写的学习笔记,所有的细节应该很全很详细。如果大家还觉得只看博客不过瘾的话,可以去B站上看着视频,UP讲得很细!

正则表达式

正则表达式, regex 或者 regexp(有时称为有理表达式)是定义搜索模式的字符序列。通常这种模式通过字符串搜索算法用于字符串上的“查找”或“查找并替换”操作 ,或者用于输入验证。它是在 理论计算机科学 和 形式语言 理论中发展起来的一种技术。(来自搜狗百科)
说白了就是进行字符匹配。

一、限定符

  • ? :表示问号前面的字符可以为0或者为1,所以这里匹配到的是use或者used

图片1

  • 星号* 代表*前面的字符可以没有,也可以出现多次,匹配如下:**

图片2

之所以没有匹配到adc,是因为明确限制了在ac之间只能出现0个b或者多个b,而不能出现其他字符
  • +会匹配出现一次及以上的字符

图片3

如果想要特定匹配在ac之间允许出现的b的次数,则可以使用花括号的方法

图片4

花括号里面也可以是允许出现的b的次数的范围

图片5

如果想要不设上界的话,可以把其中的6删掉
如果想要匹配多个字符的话,可以使用下面的这种方式,就可以进行ab的匹配

图片6

二、运算符

图片7

这里使用或运算符|来进行匹配,a 空格用来匹配下面的a空格,或运算符表示后面匹配的可以是cat也可以是dog

字符类

如果我们想要匹配由abc组成的字符的单词,那么可以使用[abc]+来进行匹配。表示匹配到的字符串中的字符只能取自于方括号里面的字符。

图片8

其中方括号中还可以写范围:
  • [a-z]+表示匹配所有的小写英文字符
  • [a-zA-Z]+表示所有的英文字符
  • [a-zA-Z0-9]+表示所有的英文字符和数字
我们也可以在最前面使用^,表示匹配所有的非后面指定的字符的字符

图片9

三、元字符

\d 代表匹配数字字符 \D 代表匹配非数字字符
\w 代表匹配单词字符(英文,数字和下划线) \W 代表匹配非单词字符
\s 代表匹配空白符(包括tab和换行符) \S 代表匹配非空白符
. 代表任意字符但不包含换行符
^会去匹配行首,$会去匹配行尾

贪婪与懒惰匹配

贪婪匹配

图片10

加个?变为懒惰匹配

图片11

例1 匹配十六进制RGB颜色值

图片12

其中先匹配#,接着方括号中要匹配的是0-9,a-z, A-Z,限制是6位,所以后面的花括号中为6,再添加个\b边界限制符,不匹配多于6个字符的。

例2 匹配ipv4地址

图片13

.表示对.进行转义,这里用.表示IP地址里面的.
这里我们发现没有完全匹配成功,因为256.1.1.1不是IP地址,所以修改如下:

图片14

  • 25[0-5]:表示前两位是25,第三位可以是0-5
  • 25[0-5]|2[0-4]\d:在上一个限制的前提下,如果第一位是2,第二位可以0-4,第三位可以是0-9
  • (25[0-5]|2[0-4]\d|[01]?\d\d?):在上一个限制的前提下,如果第一位是0或者1,第二位则可以是0-9,第三位也可以是0-9,其中?表示第一位和第二位可以有,也可以没有
  • ((25[0-5]|2[0-4]\d|[01]?\d?\d).){3}:后面的花括号里面的三次,表示把前面的匹配条件重复匹配3次
  • \b表示边界限制符

总结

图片15

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loveCC_orange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值