Regux教程
上周面米哈游data engineer岗时,被暴打一顿,很多基础的应用知识完全忘了。
记得当时面试官这么问我: 诶我看你简历上也写过做过前端相关的东西,那么你应该对正则表达式很熟悉吧,帮我写一个匹配所有正整数的正则。 我: …
虽说这个只是一个很小的题目,但是对我而言是一个很大的打击,今天我痛定思痛,准备好好整理一下这方面的知识点.
Regex 完整教程
Regex 定义:
Regex: Regular Expression, 他所做的事情就是帮你匹配指定规则的字符串.而且它在计算机中的应用非常广泛:
- 编译器中的词法分析器,会使用正则去匹配代码中的关键字
- 网站上注册表单,会使用正则来判断密码的复杂程度
- 在爬虫中,我们同样可以使用正则表达式提取我们需要的信息。
使用这个网站来进行正则表达式的测试: regex101
Regex 语法
限定符:
限定符限定的是前一个字符。
- ?可以匹配- ?之前1个字符或者0个字符
- *可以匹配0个或者多个字符
- +可以匹配出现1次以上的字符
- {start, end}指定之前字符出现的次数,如果没有end限制那就- {start,}
- (字符)可以匹配一个组合,比如’ab’, 那就(ab)+即可
或运算符:
- |字符 (字符1|字符2|… |字符n)
- [字符]+更高级,可以直接匹配所有- []中间指定的字符类,可以替换- (字符1|字符2)的操作。- [字符]+可以直接指定字符
- [a-zA-Z0-9]+可以指定范围
- ^如果在前面写一个- ^,表示非的意思
 
元字符(特殊字符)
- 
\d+代表数字字符
- 
\w代表单词字符
- 
\s代表空白符(包含Tab和换行符)
- 
\D代表非数字字符
- 
\W非单词字符
- 
\S非空白字符
- 
\.句号字符
- 
.代表任意字符,但不包含空格符,换行符
- 
^代表匹配行首
- 
&代表匹配行尾
几个例子:
- 
匹配HTML 里的标签<>符号: /<.+?>因为: *, + {}在匹配字符串的时候,默认会去匹配尽可能多的字符,解决方案就是: 加一个’?'就行啦。 这种情况下,只想要匹配span中的东西: <span>hello <span>, 你自然地会想到使用<.+>,但是这样会进入贪婪匹配,匹配最多的范围,那么如果想解决这个问题,用这一招:<.+?>就可以成功匹配了。
- 
匹配所有的颜色字符: /#[a-fA-F0-9]{6}+/b注意这里\b是用来限定单词的边界的,表示这个单词不会出现在其他单词之中,到此就为止了。
- 
匹配ipv4地址: ipv4的地址实际上是由四段数字组成,那么这个需要分类讨论来解决,这个会比较复杂,但是其实也不是很困难。 \b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
那么最后回到原来的问题,如何匹配一个十进制数字呢? 其实非常简单:
^[1-9]\d*&就行啦!
因为^表示字符以什么开头,那么很显然是以[1-9]的数字开头的,之后[0-9]我可以接无限个,也可以不接,所以是\d*结尾,最后&也就是表示以这个结尾。
最后,放一个参考表:







