最近在复习数据结构和算法的过程中发现,在做字符串相关的算法题的时候,总是会涉及到正则表达式的知识,并且在做字符串类型题目的时候,使用正则表达式,能大大提高程序的可读性。因此回顾正则表达式的知识,并整理了一篇基础笔记。
2.8更新 Road 2 Coding (r2coding.com) 刚发现的一个学习网站,上面有正则表达式的记忆手册以及正则表达式的可视化工具。
正则表达式所作的事情就是帮忙匹配指定规则的字符串。
应用
代码中的关键字匹配、密码复杂程度判定、爬虫中提取指定信息 ...
正则测试平台
regex101: build, test, and debug regex 该网站可以在线测试正则表达式。
常用限定符
? —— 0/1
问号? 表示问号前面这个字符出现0/1次,简单来说就是问号前的这个字符可有可无。
-
input =>
resumes?表示s可有可无 -
match =>
resume或者resumes
* —— 0 /1/多
星号* 表示星号前面这个字符出现0或者1或者更多次。
-
input =>
ab*c表示b可以不出现,也可以出现,也可以出现多次 -
match =>
ac或者ab(bbb...)c
+ —— 1/多
加号+ 表示加号前面这个字符出现1或者更多次。也就是一定要起码出现一次了。
-
input =>
ab+c表示b至少要出现一次。 -
match =>
abc或者ab(bbb...)c
{n} —— 精确匹配n个
花括号中的数字n表示精确匹配该花括号前字符出现的次数。
-
input =>
ab{6}c表示b要出现6次。 -
match =>
abbbbbbc
【1】范围匹配
{a,b}—— 指出现a次以上,b次以下【2】
{a,}—— 指出现a次以上
()括号 —— 组合字符串
可以发现,在我们使用之前讲的运算符的时候,都是只限定了限定符之前的那一个字符串。
现在使用()括号,将限定符的几个字符括起来,表示一个整体的限定。
[]方括号 —— 或
表示方括号中的内容只要至少出现一个就好。
-
input => `[ab]+ 表示a或b只要出现1/多次以上就好
-
match =>
^取反
匹配除了尖号后面列出的以外的字符。
[^0-9]表示所有的非数字
在正则表达式中,[a-z]表示所有的小写字母,[A-Z]表示所有的大写字母,[0-9]表示所有的数字。当然我们也可以一起写:[a-zA-Z0-9]+意思就是字母或者数字出现1次或以上就好。
元字符
正则表达式中大部分的元字符都是以反斜杠开头的:
\d表示数字字符 ==> 等同于[0-9]
\D表示非数字字符
\w表示所有的单词字符(也就是所有的单词、数字以及下划线)
\W表示非单词字符
\s表示空白符(包含空格、Tab和换行符)
\S表示非空白字符
. 句点表示任意除换行符之外的所有字符
^ 尖号只匹配行首 例如:^a只会匹配行首的a
$ 美元符号只匹配行尾 例如:$a只会匹配行尾的a
关于这些元字符,如果我们在匹配时,需要匹配的就是这些字符本身,也就是 . ^ $那么记得要在它们之前使用反斜杠\ 做转义。
贪婪匹配与懒惰匹配
贪婪匹配
贪婪匹配,也就是匹配尽可能多的字符。
例如,我想匹配html字符,也就是这里的<span></span><p></p>
因此,使用<.+> <>是必要的 里面是.句号 匹配除换行符之外的所有字符
但是我们会发现,由于正则表达式默认的贪婪匹配,所有字符都被匹配到了;这是因为这里的.句号也会匹配到>
懒惰匹配
我们可以通过添加一个问号? 来将默认的贪婪匹配切换为懒惰匹配。
实例分析
颜色值匹配
匹配文本中出现的所有十六进制RGB颜色值。
\b 表示单词字符的边界,这样可以防止超出6个字符的也被匹配到。
总结
本文是学习b站作者大大——奇乐编程学院的视频笔记:10分钟快速掌握正则表达式_哔哩哔哩_bilibili