一、什么是正则表达式?
1.定义:
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
2.组成:
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
3.何时使用:
验证——从头到尾完整匹配!
查找——只要部分匹配即可!
二、正则表达式的基本语法和规则
1.备选字符集:规定某一位字符可用的备选字符的集合
语法:[可选字符列表]
强调:
无论备选字符集包含多少字符,只能选1个
必须选1个!
比如:6位数字的密码
[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]
简化:1. 当备选字符连续时,可用-表示范围的区间
比如:
[0123456789]-->[0-9]
[0-9][0-9][0-9][0-9][0-9][0-9]
[a-z]-->1位小写字母
[A-Z]-->1位大写字母
[A-Za-z]-->1位字母,大小写都行
[0-9a-zA-Z]-->1位字母或数字都行
反选:[^不能选的字符列表]
比如:[^47] 强调:^作“除了”使用时,只能放在开头
指定匹配位置:
^表达式: 必须以表达式的规则为开头
表达式$: 必须以表达式的规则为结尾
比如:选择字符串开头的空格?^\s*
2.指定匹配位置:
^表达式: 必须以表达式的规则为开头
表达式$: 必须以表达式的规则为结尾
比如:选择字符串开头的空格?^\s*
选择结尾空格?\s*$
选择开头或结尾的空格?^\s*|\s*$
*预告:今后只要在程序中执行验证:都要前加^后加$*
表示从头到尾完整匹配。
比如:test():
^\d{6}$——从头到尾必须只能是6位数字
1234567
3.预判
在正式匹配正则表达式之前,先预读整个字符串,进行初步匹配,如果预判都未通过,则不再验证!
1)(?=表达式): 先浏览字符串是否满足表达式的要求
何时使用:只要正则中出现类似"而且"
比如:4位数字,但不能包含4和7
(?=[^47]$) 是否由除了4,7之外的字符组成
2)(?!表达式):先检查字符串是否不满足表达式要求
比如:6位以上密码。
字母,数字组成
首字母不能是数字: [a-zA-Z][a-zA-Z0-9]{5,}
必须至少包含1个大写字母
不能都由小写字母和数字组成: (?![a-z0-9]+$)
必须至少包含1个数字
不能都由小写字母和大写字母组成:
(?![a-zA-Z]+$)
三、正则表达式的含义
1.常见含义