正则表达式的基础知识点
1、匹配字符
. 匹配任意单个字符,不能匹配空行
[ ] 匹配指定范围内的任意单个字符
[^] 取反
[:alnum:] 或 [0-9a-zA-Z]
[:alpha:] 或 [a-zA-Z]
[:upper:] 或 [A-Z]
[:lower:] 或 [a-z]
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广 )
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 或[0-9]
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
2、配置次数
* 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* 任意前面长度的任意字符,不包括0次
\? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次
{n,} 匹配前面的字符至少n次
3、位置锚定
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的左右侧
^PATTERN$,用于模式匹配整行
^$空行
^[[:space:]].*$ 空白行
< 或 \b 词首锚定,用于单词模式的左侧
> 或 \b 此为锚定,用于单词模式的右侧
4、需要转义的特殊字符
$ ( ) * + . ? [ \ ^ {
在文本中遇到这几种特殊字符想转为文本需要通过反斜杠 \ 进行转义:
/\$ \( \) \* \+ \. \? \[ \\ \^ \{ /g
注意:
上面为什么没出现 - 减号,}右花括号,]右中括号的原因?首先减号符是在[ ]中的,在前面没遇到转义的[ 左方括号时,减号符及右方括号 -]
是当普通文本处理,无需转义,而花括号也如此。
5、概括字符集
\d 匹配出数字,也就是数字概括字符集,字符集表示[0-9]
\D 匹配非数字,字符集表示[^0-9]
\w 匹配字母、数字,也就是单词字符,字符集表示[A-Za-z0-9]
\W 匹配非单词字符,\n\t\r#$%^空格
\s 匹配\n\t\r空格、空白字符,不包括%$#特殊字符
\S 匹配非空白字符
. 匹配除换行符\n以外的所有字符
6、断言
x(?=y) 匹配'x'仅仅当'x'后面跟着 'y',这种叫做先行肯定断言
(?<=y) 匹配'x'仅仅当'x'前面是'y',这种叫做后行肯定断言
x(?!y) 仅仅当'x'后面不跟着'y'时匹配'x',这种称为先行否定断言
(?<!y)x 仅仅当'x'前面不是'y'时匹配'x',这种称为后行否定断言
正则表达式输入密码格式
一般情况下,我们在注册一个新账户的时候,会设置密码,在设置密码的时候会有一个字符限制的情况,有的会要求简单就数字+字母就可以了,有的肯会稍微严格一点,格式要求就是数字+字母+特殊符号。可能更严格的就是字母要区分大小写。
1、在要求数字+字母的格式的时候,利用正则表达式可以写成
(?=.*[0-9])(?=.*[a-z])
这样的话在我们输出的时候他是符合条件的。但是当我们换一种方式设置的时候,就会报错。可以看到即便输入的含有字母或者数字,但是输入中含有没有设置的内容,也是不可行的。
2、在要求数字+字母+特殊符的格式的时候,利用正则表达式可以写成
(?=.*[0-9])(?=.*[a-z])(?=.*[!@\#$%^&\*\\\(\)])
结果也是只可以输入的组合是数字+小写字母+特殊符号,因为在一些语法里面,部分特殊符号会具有一些特定含义,所以在【】中需要加上\来代表转义字符进行转义。
3、在严格要求的情况下,一般要求输入的都是数字+小写字母+大写字母+特殊符的格式的时候,利用正则表达式可以写成
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@\#$%^&\*\\\(\)])
4、所以,在上述情况下,我们需要对字符串的长度输入进行一些限制,比如说最少输入8位,最多输入16位。
那么我们就可以直接在正则表达式后面加上一个**^.{8,16}$**也就是对字符串长度尽行了限制。
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@\#$%^&\*\\\(\)])^.{8,16}$
这样的话,如果输入字符长度超过16或者不够8都是不可以的,但是在这个区间内是刚刚好。
过长的情况下
不够的情况下:
但是在这个区间内就刚好