什么是正则表达式
正则表达式描述了一种字符串匹配模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合摸个条件的子串等。
匹配次数
实验文件的内容:
1)***** 匹配前面的字符任意次,包括0次,在贪婪模式中,尽可能多的进行匹配
2).* 任意前面长度的任意字符,但是不包括0次
3)?匹配前面的字符0次或者1次
4)+ 匹配前面的字符至少1次
5){n} 匹配前面的字符n次
6){m,n}匹配前面的字符至少m次,至多n次
7){,n} 匹配前面的字符至多n次
8){n,}匹配前面的字符至少n次
匹配字符
文件内容:
-
. 匹配任意单个字符,不能匹配空行
-
[] 匹配指定范围内的任意单个字符
-
[^] 取反
-
[: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:] 标点符号
定位
-
^ 行首锚定,用于模式的最左侧
-
$ 行尾锚定,用于模式的最右侧
-
^PATTERN$,用于模式匹配整行
-
^$ 空行
-
^ [:space:].*$ 空白行
-
‘<’ 或 \b 词首锚定,用于单词模式的左侧
-
'>'或 \b 词尾锚定;用于单词模式的右侧
分组:() -
后向引用:\1, \2, …
1)\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
2)\2 表示从左侧起第2个左括号以及与之匹配右括号之间的模式所匹配到的字符,以此类推
在正则表达式中的特殊字符
1)$ :匹配输入字符串的结尾位置
2)():标记一个子表达式的开始和结束位置,子表达式可以获取供以后使用
3)*:匹配前面兹表示的零次或者多次
4)+:匹配前面字符的一次或者多次
5). :匹配除了换行符‘\n’之外的任何单字符
6)[:标记一个中括号表达式的开始
7)?:匹配前面字符零次或者一次、原义字符、向后引用、转义符号
8)^:匹配输入字符串的开始位置,但是在方括号表达式中使用时,表示不接受方括号表达式中的字符集合。
9){ :标记限定符表达式的开始
10 | :知名两个选项中的一个选择。
在这些特殊符号中,如果想要运用符号自身,需要在使用的时候家一个‘\’转义符进行转义;例如:当要使用$符号本身的时候,在运用的时候需要写成$。
正则表达式输入密码格式
一般情况下,我们在注册一个新账户的时候,会设置密码,在设置密码的时候会有一个字符限制的情况,有的会要求简单就数字+字母就可以了,有的肯会稍微严格一点,格式要求就是数字+字母+特殊符号。可能更严格的就是字母要区分大小写。
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都是不可以的,但是在这个区间内是刚刚好。
过长的情况下
不够的情况下:
但是在这个区间内就刚好。
利用测试的网站名:https://regex101.com