正则表达式之环视

什么是环视

环视(Lookaround)用于匹配文本中的特定位置,环视本身不会匹配任意字符。

环视的类型

有四种类型的环视,如下表所示,可以这样记忆,肯定环视的是等号,否定环视的是感叹号,顺序环视无额外字符,逆序环视在问号后面加一个小于号。

名称 英文 表达式 含义
肯定顺序环视 Positive Lookahead (?=Expr) 所在位置右侧能够匹配 Expr
肯定逆序环视 Positive Lookbehind (?<=Expr) 所在位置左侧能够匹配 Expr
否定顺序环视 Negative Lookahead (?!Expr) 所在位置右侧不能匹配 Expr
否定逆序环视 Negative Lookbehind (?<!Expr) 所在位置左侧不能匹配 Expr

示例

下面举两个例子来理解环视。

示例一

校验密码,必须同时出现大写字母、小写字母、数字、特殊符号(#$_!),长度至少8位

^(?=.*[\d]+)(?=.*[a-z]+)(?=.*[A-Z]+)(?=.*[#$_!]+)[\w#$!]{8,}$

表达式的意思是开头位置后面应该是这样一个位置,该位置后面有数字,有小写字母,有大写字母,有特殊符号,该位置后面有至少8个指定的字符,\w等价于[0-9a-zA-Z_]。

示例二

校验密码,必须至少出现大写字母、小写字母、数字、特殊符号(#$_!)中的两种,长度至少8-20位

^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)(?![#$_!]+$)[\w#$!]{8,20}$

表达式的意思是开头位置和结尾位置之间不能全是数字,不能全是小写字母,不能全是大写字母,不能全是特殊符号,指定的字符出现8到20次,\w等价于[0-9a-zA-Z_]。