什么是正则表达式?
比如,判断密码中是否有数字及字母,手机号是否为11位数字等等,完成这些复杂的查找操作,就要用到正则表达式来去匹配,正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串,将匹配的子串做替换或者从某个串中取出某个条件的子串等。
正则表达式可以做什么?
数据隐藏:比如136*****256 隐藏掉部分手机号,保护隐私
数据采集:网络爬虫,可以利用正则的匹配来抓取
数据过滤:比如一些敏感词的过滤
数据验证:手机号的验证,邮箱,ip等等....
正则语法:
//斜杠开始斜杠结束
后面跟上i是匹配的时候忽略大小写,g表示全局匹配,匹配成功后,继续向下匹配,不加g匹配到第一次就停止匹配了。
在正则表达式中,通过一对圆括号括起来的内容,我们就称为‘子表达式’。
在正则表达式中,子表达式匹配到相应的内容时,系统会自动捕获这个行为,
然后将子表达式匹配到的内容放入系统的缓存区中。我们把这个过程就称之为“ 捕获” 。
#例 查找连续的四个数字 1111 $a=/\d\d\d\d/g #查找数字 1221 ,5665 $b=/(\d)(\d)\2\1/g
正则表达式组成:
正则表达式是有普通字符以及特殊字符组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则表达式三步走:
1.查什么
2.查多少
3.从哪查
查什么(匹配符)
匹配符:字符匹配符用于匹配某个或某些字符;
前面用到\d就是匹配一个0-9的数字
在正则表达式中,通过一对中括号起来的内容,我们就称之为‘字符簇’。
字符簇代表的是一个范围,但是匹配时,只能匹配某个范围中固定的结果。
字符簇 | 含义 |
[a-z] | 匹配字符a到字符z之间的任一字符 |
[A-Z] | 匹配字符A到字符Z之间的任一字符 |
[0-9] | 匹配数字0到9之间的任一数字 |
[0-9a-z] | 匹配数字0到9或字符a到字符z之间的任一字符 |
[0-9a-zA-Z] | 匹配数字0到9或字符a到字符z或字符A到Z之间的任一字符 |
[abc] | 匹配字符a或字符b或字符c或字符d |
[1234] | 匹配数字1或数2或数字3或数字4 |
在字符簇中,通过一个^脱字符来表示取反的含义。
字符簇 | 含义 |
[^a-z] | 匹配除字符a到字符z以外的任一字符 |
[^0-9] | 匹配除数字0到9以外的任一字符 |
[^abcd] | 匹配除a,b,c,d以外的任一字符 |
特殊匹配符
字符簇 | 含义 |
\d | 匹配一个数字字符,与使用[0-9]等价 |
\D | 匹配一个非数字字符,还可以使用[^0-9] |
\w | 匹配包括下划线的任何字母数字 |
\W | 匹配任何非字母数字下划线字符,还可以使用[^\w] |
\s | 匹配任何空白字符 |
\S | 匹配任何非空白字符,还可以使用[^\s] |
. | 匹配除\n之外的任何单个字符 |
[\u4e00-\u9fa5] | 匹配中文字符中的任一字符 |
查多少:
什么是限定符?
限定符可以指定正则表达式的一个给定字符必须要出现多少次才能满足匹配。
*:匹配前面的子表达式零次或多次,0到多 +:匹配前面子表达式一次或多次,1到多 ?:匹配前面的子表达式零次或一次,0或1 {n}:匹配确定的n次 {n,}:至少匹配n次 {n,m}:最少匹配n次且最多匹配m次
在正则表达式中,默认情况下,能匹配多的就不匹配少的,我们把这种的匹配模式就称为贪婪匹配,也叫作贪婪模式。
在限定符后面加一个?就转换为非贪婪匹配原则,优先匹配少的,也就是惰性匹配。
从哪查:
定位符可以将一个正则表达式固定在一行开始或结束
也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式
^:匹配输入字符串的开始位置(在字符簇中是取反的意思,放在整个表达式中是开始位置)
$:匹配输入字符串的结束位置
\b:匹配一个单词边界
\B:匹配非单词边界
转义字符:
因为正则表达式中 . 或 + \ 等属于表达式的一部分,但是我们在匹配时,字符串中也需要匹配
这些特殊字符,所以,我们必须使用* 反斜杠* 对某些特殊字符进行转义:
需要转义的字符:
. 点号 () 小括号 [] 中括号 / 左斜杠 \ 右斜杠 | 选择匹配符
未完待续~~~~~~~~~~~~~~~~