正则表达式:是一种用于校验用户输入或者系统字符串是否满足需求的一种特殊的语言
用途:
页面上 数据库上 用于第3方系统数据校验
正则表达式:校验的是字符串的格式,而不是内容
为什么要用正则表达式?
因为它可以帮我们处理一些复杂的文本数据
正则表达式:正如它的名字一样,它定义的是一套规则,通过这个规则,我们系统就可以匹配一类字符串
我们学也就是学的是:如何制定这个规则
开发中使用正则表达式的流程:
1、分析要匹配的数据,写出测试需要用的测试数据
2、在工具软件中进行匹配测试
3、在程序中调用通过测试的正则表达式
正则表达式的语法:
1、普通字符
-字母,数字,汉字,下划线,以及没有特殊含义的标点符号 它们都是"普通字符" 表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符串
2、转义字符
n 换行
t 制表符
代表本身
^ 代表^本身 $ 代表$本身
. ( ) { } ? + * | [ ]
3、标准字符集合(匹配符合字符集合的任意一个字符)
能够与"多种字符" 进行匹配
注意区分大小写,大写代表的是相反的含义
d 代表的是匹配一个数字,0-9中的任何一个
w 代表的是汉字、字母,数字,下划线中的任意一个 也就是A-Za-z0-9中间的任何一个 === [A-Za-z0-9_]
s 代表的是空格,制表符,换行符等空白字符中的任意一个
. 代表的是任意一个字符(除了换行符)
4、自定义字符集合
使用[]自定义字符集合,它也是匹配符合中括号中间的任意一个字符
例如:[^23f] 代表匹配除了23f以外的任意一个字符 ^ 代表除了什么以外
[^23f] 代表匹配23f中间的任意一个字符
[f-z] 代表匹配f-z之间的任意一个字母
[^A-Fa-f]
特点:正则表达式的特殊符号,被包含在中括号中,则失去特殊含义,除了^ - 之外
标准字符集合,除了小数点以外,如果被包含中中括号,自定义字符集合将包含标准集合
例如:
[da-f{}]
5、量词
用来修饰匹配次数的特殊符号
{n} 代表表达式重复n次
{m,n} 代表表达式至少重复m次,最多重复n次
{m,} 代表表达式至少重复m次
? 匹配表达式0次或者1次,=== {0,1}
+ 表达式至少出现1次 === {1,}
* 表达式不出现或者出现任意次数 === {0,}
定义量词时,分为两种模式:
贪婪模式:匹配的字符越多越好,默认就采用的是它
非贪婪模式:匹配的字符越少越好,做法是:在量词后加?
6、字符边界
匹配不是字符,而是匹配的字符的边界,有的时候,我们又把称为"零宽"
^ 与字符串开始的地方进行匹配
$ 与字符串结束的地方进行匹配
b 匹配是一个单词的边界 例如:nerver单词中,erb 它匹配的是结束的er,而不是单词中间的er
B 与b取反
7、选择符和分组
选择符 | (或) 表示左右两边的表达式之间是"或"的关系
分组有两种分法:
捕获式分组 使用()将需要匹配的字符条件包起来,将会按照条件将符合的字符串给捕获并存储起来,以供下次使用
这种模式的所有(),都会自动分配到一个编号,使用()的捕获根据左括号的顺序按照1开始进行编号
非捕获式分组 使用(?:表达式),这种方式()中间符合表达式的内容,会被抓捕,但是不会被存储在内存中,也不会给他分配所谓的编号
推荐使用它
在捕获组中,使用编号的方式,引用其他的表达式,被称为"反向引用" 最大作用:对分组已捕获的字符串进行再次引用
8、预搜索
(?=expression) 断言自身出现的位置的后面能匹配的表达式元素
(?!expression) 断言自身出现的位置的后面不能匹配的表达式元素
(?<=expression) 断言自身出现的位置的前面能匹配的表达式元素
(?<!expression) 断言自身出现的位置的前面不能匹配的表达式元素
举例:
1、匹配电话号码 ^0[d]{2,3}-[d]{7,8}$
010-6356123
· 0817-5761253
2、匹配手机号码 ^1[3|4|5|7|8|9]{1}[d]{9}$
13398199549
13356894578
18284191849
3、匹配电子邮箱 ^[A-Za-z0-9_][email?protected][A-Za-z0-9_]+.[A-Za-z0-9_]{2,4}
[email?protected]
[email?protected] 4、匹配IP地址 [0-9]+.d+.d+.d+ 5、匹配密码 [w]{6,20} 至少6位