最近闲来无聊看着视频大概学习了下正则表达式相关的一些内容,以前都是直接百度,现在还是觉得这个还是挺有用的,所以总结分享一下。
测试工具网站:
regex101: build, test, and debug regex 很棒很棒的网站,可以测试你的表达式语句是分正确,效果是否能实现,还会有分析,以及各种规则介绍,还可以生成代码,真的是很棒的!!!
常用限定符
>> ?
该限定符表示它前面的字符需要出现0次或者1次。
事例如下:


>> *
该限定符表示它前面的字符需要出现0次或者多次。

>> +
该限定符表示匹配出现一次以上的字符

>> {}
该限定符表示指定字符出现的次数
x表示具体次数
首先是精确指定出现次数 {x}
如下事例所示分别表示指定出现3次和指定出现4次


也可以进行区间指定 {x,y}
如下事例所示分别表示指定字符出现1-4次和1-6次和2-6次



指定出现字符在x次以上 {x,}
如下事例所示分别表示指定字符出现1次和3次以上


上述四种为单字符匹配限定符。
>> ()
如想要匹配多个字符可以将想要匹配的字符用()括起来。

>> 或运算符 |
如下事例所示,匹配 a car或者a dog,

注意必须要有括号,否则就成了a car或者dog

>> [ ] 字符类
方括号中填入匹配由哪些字符构成的单词 ,即要求匹配的字符只能取自于方括号中的内容

可以和其他限定符组合,如下所示分别是方括号中的字符在单词中出现几个及以上的



也可以在方括号中指定字符的范围,如:
[a-z]+ 代表所有的小写英文字符

[A-Z]+ 代表所有的大写英文字符

[0-9]+ 代表所有的数字

也可以组合,代表所有的字母与数字

>> ^ 脱字符
匹配除方括号中^后面列出字符以外的字符,比如:
列出 所有非数字字符,包括换行符

元字符
\d \w \s \D \W \S
\d 数字字符
\w 单词字符(英文、数字及下划线)
\s 空白符(包含Tab制表符和换行符 )
\D 非数字字符
\W 非单词字符
\S 非空白字符
. 句点代表任意字符但不包括换行符
^ 匹配行首

$ 匹配行尾

贪婪与懒惰匹配

如下图所示,本意是想去匹配句中的html标签,但是使用<.+>却将所有字符全都匹配了,原因是.+会匹配尽可能多的字符 .代表任意字符自然也会匹配> ,因此才会有这样的结果。

加一个?会实现我们想要的效果,它会将正则表达式中默认的贪婪匹配切换为懒惰匹配

再举一个例子
下例所说匹配l字符1到3个

当我们加上?后则只匹配1个

\b 单词字符的边界
下面的示例以及实例1中可以体会出其效果



实例1 RGB颜色职匹配


实例2 IPv4地址匹配
(IPv4地址由四段数字构成,数字之间由句点隔开)

\d+会赔配任何长度大于1的数字,\. 代表 . 这个字面量,因为.是元字符是一个特殊符号,所以需要用反斜杠做转义。
我们知道IP地址的每个部分都是8位数字,也就是说范围介于0-255之间 ,所以需要进行如下优化:



(25[0-5]|2[0-4]\d|[0-1]?\d\d?)\.
25[0-5]表示250-255的情况
2[0-4]\d表示200-249的情况
[0-1]\d\d表示000到199的情况,因为可能是一位数或者两位说,所以[0-1]?\d\d?
(25[0-5]|2[0-4]\d|[0-1]?\d\d?)\.最后加\.匹配.特殊符号
((25[0-5]|2[0-4]\d|[0-1]?\d\d?)\.){3}表示连续匹配三次
((25[0-5]|2[0-4]\d|[0-1]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[0-1]?\d\d?)接下来家方括号里的内容再匹配一次这次没有.这个符号
\b((25[0-5]|2[0-4]\d|[0-1]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[0-1]?\d\d?)\b最后前后加上边界符
总结如下:

【10分钟快速掌握正则表达式】
10分钟快速掌握正则表达式_哔哩哔哩_bilibili