正则表达式学习

.

元字符

元字符 说明
. 匹配除换行符以外的任意字符
\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}$

区间

  1. 限定0到9可以写成[0-9]
  2. 限定A-Z写成[A-Z]
  3. 限定某些字母[aeiou]

零宽断言

  1. 断言:选择在所给规则的区间内出现的内容
  2. 零宽:断言只占匹配位置,不占字符,匹配结果不返回断言本身

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. 反向引用

  1. 数字编号组反向引用:\number

  2. 命名编号组反向引用:\k\

如匹配重复的字符可使用(\w)\1

贪婪和非贪婪

1. 贪婪

默认情况下匹配尽可能多的字符,如\d{2,6}在满足6个字符的条件下会匹配6个

2. 非贪婪

懒惰量词是在贪婪量词后边加个?

语法 说明
*? 重复0次或更多次,但尽可能少重复
+? 重复一次或更多次,但尽可能少重复
?? 重复0次或一次,但尽可能少重复
{n,}? 重复n次或更多次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复