正则表达式?: ?!理解
2020-05-24 本文已影响0人
愤怒的老照
官网定义:
image.png前瞻后顾
要理解正则中的这几个用法,就需要用到前瞻、后顾、负前瞻、负后顾四个概念。
我理解这里说的前瞻和后顾不是相对于句子来说的,而是相当于正则解释器来说的,前瞻就是解释器还没有解释到的地方,后顾就是解释器已经处理的地方。
说明
- 前瞻: exp1(?=exp2) 查找exp2前面的exp1
- 后顾: (?<=exp2)exp1 查找exp2后面的exp1
- 负前瞻: exp1(?=exp2) 查找后面不是exp2的exp1
- 负后顾: (?<=exp2)exp1 查找前面不是exp2的exp1
例子
1、用户名格式要求,满足个数是2-20,同时包含数字和字符,并且不包含特殊字符
"^(?!.*[@])(?!\\s*$)(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]{2,20}$
2、密码格式要求,不能为纯数字且不能包含特殊符号
^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$
3、字符串ABA、CBC、DBD
- 想要匹配ABA中的B,需要前瞻后顾,(?<=A)B(?=A)
- 想要除了ABA中的B,需要负前瞻和负后顾(?<!A)B(?!A)