正则表达式
1.正则表达式,又称规则表达式,是一种文本模式,包括普通字符和特殊字符(称为“元字符”),正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
2.字符
\ | 转义符 |
^ | 匹配行首 |
$ | 匹配行尾 |
* | 匹配任意次 |
+ | 匹配一次或多次(>=1) |
? | 匹配零次或一次 |
[a-z] | 匹配范围内的任意字符 |
{n} | 匹配确定的n次 |
{n,} | 至少匹配n次 |
{n,m} | 最少n次且最多m次 |
| 匹配单个字符 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
\cx | 匹配x指明的控制字符 |
\d | 匹配数字字符 |
\D | 匹配非数字字符 |
\n | 匹配换行符 |
\r | 匹配回车符 |
\s | 匹配任何不可见字符 |
\S | 匹配任何可见字符 |
\t | 匹配制表符 |
\w | 匹配任何单词字符 |
\W | 匹配任何非单词字符 |
| | 将匹配条件进行或运算 |
3.举例
^[0-9]*$:表示只能输入数字。
^\d{n}$:表示只能输入n位的数字。
^[A-Za-z]+$:只能输入由26个英文字母组成的字符串。
^[A-Za-z0-9]+$:只能输入由数字和26个英文字母组成的字符串。
断言研究
1.断言分为四种形式:
- (?=pattern) 正向先行断言
- (?!pattern) 负向先行断言
- (?<=pattern) 正向后行断言
- (?<!pattern) 负向后行断言
注:pattern是一个正则表达式
2.详细介绍
- (?=pattern)正向先行断言
代表字符串中的位置,位置之后的字符序列可以匹配pattern。
例如:“a regular expression”,要想匹配regular中的re,但不能匹配expression 中的re,可以用re(?=gular).
- (?!pattern)负向先行断言
代表字符串中的位置,位置之后的字符序列不能匹配pattern。
例如:resources expression retirement字符串,匹配re且re后不是s,可以使用re(?!s)。
- (?<=pattern)正向后行断言
代表字符串中的位置,位置之前的字符序列能匹配pattern。
例如:匹配字符串中的re,\w表示一个单词字符,可以利用(?<=\w)re。
- (?<!pattern)负向后行断言
代表字符串中的位置,位置之前的字符序列不能匹配pattern。
例如:匹配字符串中,单词开头是re的,可以用(?<!\w)re。
注意:1)正向和负向:正向表示匹配括号内的表达式,负向表示不匹配。
2)先行断言,是当扫描指针位于某处时,引擎会尝试匹配指针还未扫过的字符,先于指针到达该字符,故称为先行。后行断言,引擎会尝试匹配指针已扫过的字符,后于指针到达该字符,故称为后行。
练习:利用断言实现用户名限制,限制出现大小写,数字,字符16位,首字母大写。
如果首字母不大写则无法匹配: