正则表达式学习
.
元字符
元字符 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\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次,但尽可能少重复 |