一、背景
一点儿也不会正则表达式的时候,一听“正则”就头痛,全然没有想看的意思啊!后来看了慕课的《鬼斧神工之正则表达式》,发现正则君其实并没有那么高冷~以前就做了纸笔记,一直放在家里,在公司想查阅的时候,很不方便。虽然网上有很多资料,可是还是更爱看自己的笔记对不对,因为自己的笔记是自己的思路,比较顺手(也可能是我矫情)。所以,决定,记到这里来,以后就再也不怕找不到啦!
二、开始
1、正则的应用
window文件搜索
linux列出文件命令
imooc用户注册的邮箱验证
2、界定符
/[0-9]/ #[0-9]# {[0-9]}
[789] :匹配7,8或者9
3、原子
(1)可见
(2)不可见 换行符 回车等等
eg: . 匹配除换行符之外的任意字符
\d --> [0-9]
\s --> [\f\n\r\t\v](不可见原子)
\w --> [0-9a-zA-Z_](数字,字母或下划线)
大写的 \D \S \W 分别代表了小写的\d \s \w的反义
4、元字符
(1) | 匹配两个或者多个分支选择
(2)[ ] 匹配括号中任意一个原子
(3)[^] 除方括号中的原子外的任意字符
eg: [Dd]uang == Duang|duang (写法不同,但是效果一样哦~)
[789] 匹配7,8或者9
[^789] 匹配除了7,8,9之外的任意字符
5、量词
'{n}' --- 前面的原子出现n次
'{n,}' --- 前面的原子至少出现n次
'{n,m}' -- 至少出现n次,最多m次
'*' ---- 0次,1次,或多次 相当于 {0,}
'+' ---- 1次或多次 相当于{1,}
'?' ---- 0次或1次 相当于{0,1}
eg: 5{3} == 555 5{2} == 55
6、边界控制
(1)^ 开始
(2)$ 结尾
(3)() 匹配其中的整体为原子
eg: ^Duang~$
7、模式单元
(D|d)uang~ 匹配 Duang~或者duang~
8、修正模式
(1)贪婪匹配 取其长
(2)懒惰匹配 取其短
eg: '/imooc.+123/'
'I love imooc_123123123123123'
解析:根据我们上面介绍的.是任意字符,+是至少1次,那正则表达式所匹配的就是imooc加上1个以上的任意字符再加上123所组成的字符串。在下面的字符串中我们能匹配出以下几种情况:
'I love imooc_123' .+在这里匹配的是'-'
'I love imooc_123123' ------ '_123'
'I love imooc_123123123' ----- '_123123'
'I love imooc_123123123123' --- '_123123123'
'I love imooc_123123123123123' -- '_123123123123'
这时匹配结果出现了歧义。
在实际的应用中,默认的是贪婪匹配,如果我们想让正则表达式进行懒惰匹配,如下做即可:
'/imooc.+123/U' (加了一个大写的U)
i :忽略字母大小写
x:忽略空白(空格,tab制表符)
eg: '/imOoc.+123/Ui' 匹配 imooc_123
/i MOoc .+123/Uix 匹配 imooc_123
9、举个栗子
(1).+ 非空
(2)\d+.\d{2}$ ---- 保留两位小数的浮点数
(3)1[3578]\d{9} 1(3|5|7|8)\d{9} ---- 大陆手机号
(4)^\w+(.\w+)*@\w+(.\w+)+$ ---- email地址
(5)^(https?://)?(\w+.)+[a-zA-Z]+$ ---- URL链接
三、总结
这样看起来,正则表达式是不是就没那么可怕了呢?这些算是入门级,平时基本够用。还有断言等等,后续等我研究明白了再写。因为我是前端主要的语言是javascript,但是js暂时对断言支持的不是很好。感兴趣的童鞋可以去看看《鬼斧神工之正则表达式》那门课~祝学习愉快!