正则表达式
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位,首字母大写。
如果首字母不大写则无法匹配: