正则表达式学习
.
元字符
| 元字符 | 说明 | 
|---|---|
| . | 匹配除换行符以外的任意字符 | 
| \w | 匹配字母数字下划线汉字 | 
| \s | 匹配任意空白符 | 
| \d | 匹配数字 | 
| \b | 匹配单词的开始或结束 | 
| ^ | 匹配字符串的开始 | 
| $ | 匹配字符串的结束 | 
| \un | 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符 | 
反义
| 元字符 | 说明 | 
|---|---|
| \W | 匹配不是字母数字下划线汉字的字符 | 
| \S | 匹配任意不是空白符的字符 | 
| \D | 匹配不是数字的字符 | 
| \B | 匹配不是单词的开始或结束的位置 | 
| x | 匹配除x以外的任意字符 | 
重复限定符
| 语法 | 说明 | 
|---|---|
| * | 重复0次或更多次 | 
| + | 重复一次或更多次 | 
| ? | 重复0次或一次 | 
| {n} | 重复n次 | 
| {n,} | 重复n次或更多次 | 
| {n,m} | 重复n到m次 | 
分组
正则表达式以小括号()来做分组
^(ab)* //匹配字符串中0到多个ab开头
转义
用\转义被正则表达式使用的字符
^(\(ab\))*
条件或
1  | ^(130|131|132|155|156|185|145|176)\d{8}$  | 
区间
- 限定0到9可以写成[0-9]
 - 限定A-Z写成[A-Z]
 - 限定某些字母[aeiou]
 
零宽断言
- 断言:选择在所给规则的区间内出现的内容
 - 零宽:断言只占匹配位置,不占字符,匹配结果不返回断言本身
 
1. 正向先行断言
- 语法:(?=pattern)
 - 作用:匹配pattern表达式前面的内容,不返回本身
 
1  | <span class="read-count">阅读数:641</span>  | 
用\d+(?=</span>)可以匹配到641
2.正向后行断言
- 语法:(?<=pattern)
 - 作用:匹配pattern表达式前面的内容,不返回本身
 
用(?<=<span class="read-count">阅读数:)\d+可以匹配到641
3. 负向先行断言
- 语法:(?!pattern)
 - 作用:匹配非pattern表达式前面内容
 
4. 负向后行断言
- 语法:(?<!pattern)
 - 作用:匹配非pattern表达式后面内容
 
捕获和非捕获
1.数字编号捕获组
- 语法:(exp)
 
例:(0\d{2})-(\d{8}) 020-85653333
| 序号 | 编号 | 分组 | 内容 | 
|---|---|---|---|
| 0 | 0 | (0\d{2})-(\d{8}) | 020-85653333 | 
| 1 | 1 | (0\d{2}) | 020 | 
| 2 | 2 | (\d{8}) | 85653333 | 
2. 命名编号捕获组
- 语法:(?\
exp)  
例:(?<quhao>0\d{2})-(?<haoma>\d{8})
| 序号 | 名称 | 分组 | 内容 | 
|---|---|---|---|
| 0 | 0 | (0\d{2})-(\d{8}) | 020-85653333 | 
| 1 | quhao | (0\d{2}) | 020 | 
| 2 | haoma | (\d{8}) | 85653333 | 
3. 非捕获组
语法:(?:exp)
例:(?:0\d{2})-(\d{8})
| 序号 | 编号 |       分组       |     内容     |
| :—: | :—: | :———————: | :—————: |
|  0   |  0   | (0\d{2})-(\d{8}) | 020-85653333 |
|  1   |  1   |     (\d{8})      |   85653333   |
4. 反向引用
数字编号组反向引用:\number
命名编号组反向引用:\k\
如匹配重复的字符可使用(\w)\1
贪婪和非贪婪
1. 贪婪
默认情况下匹配尽可能多的字符,如\d{2,6}在满足6个字符的条件下会匹配6个
2. 非贪婪
懒惰量词是在贪婪量词后边加个?
| 语法 | 说明 | 
|---|---|
| *? | 重复0次或更多次,但尽可能少重复 | 
| +? | 重复一次或更多次,但尽可能少重复 | 
| ?? | 重复0次或一次,但尽可能少重复 | 
| {n,}? | 重复n次或更多次,但尽可能少重复 | 
| {n,m}? | 重复n到m次,但尽可能少重复 |